I've learned over the years that most people stall because of a lack of understanding about fundamentals and concepts. I always say concepts are universal, but technologies are specific. What I mean by this is once you learn a concept, it will always be applicable and helpful. The more concepts one understands, the easier it is for one to relate situations, issues, and other concepts to each other. It makes it much easier to solve problems and learn new "tools".
I am the type of person that never memorizes all the details about a program, language, etc. I memorize the basics and most useful aspects, but then learn how to quickly find what I'm looking for (Google is everyone's friend). I've noticed that those having issues with progression often times try to memorize useless things that could be left in a dictionary for lookup purposes. I finally reached the conclusion that they try to memorize so many things because they don't know the difference between what is important to know and what isn't. Concepts are important. Knowing specific methods, libraries, etc. is not important. If one is efficient with searching, and knows what to look for, they will quickly find it.
I believe that we are teaching things incorrectly for the most part. We are trying to teach people specific programming languages to get them going as soon as possible instead of helping them learn universal concepts. I'm not just talking about the college level, but high school and even grade school. Once the fundamentals are understood, the details can be filled in much easier. One issue is a majority of people are impatient and want to produce something right away. This can be addressed by having demonstrations of what could be created based on concept instead of technology.
I'll admit, this is by far no easy task. But most things worthwhile aren't!
So what are some concepts that I think are paramount to continuous progression? Here are just a few:
- Hardware (CPU vs Hard Disk vs Hard Drive vs Memory vs Tower Case)
- Software Development vs Programming vs Architecture
- Binary vs Base 10 vs Octal vs Hexidecimal
- Machine Language Instructions
- Low Level Language (Assembly)
- High Level Language (C++)
- 3rd, 4th, and 5th Generation Languages
- Computer's Can't Think For Themselves
- Operating System
- Applications vs Services vs Server vs Utility vs Library
- Networking
- Protocols (HTTP, FTP, etc)
- Formats (XML, Text, Binary, etc)
- Character Codes (ASCII, Unicode, etc)
- Process (Heavy Weight)
- Thread (Light Weight)
- Multi-Threading
- Parallel Processing
- Heap vs Stack
- Memory Allocation and Deallocation
- Basic programming concepts (Conditions, Jumps, Variables, Loops, Reads vs Writes, etc)
- Crash vs Lockup vs Infinite Loop
- Peripherals and Interfaces (Mice, Graphics Card, USB Port, etc)
This is a very small list, but you get the idea. Most of the concepts don't have anything to do with programming directly. They are all things that should be known and understood however for continual progression. Once many concepts are understood, you'll see that when Microsoft comes out with a "new" technology or fad, it has already been done and probably done 20 to 30 years ago.
No comments:
Post a Comment