5 ms·
I don't get it. What do people mean nowdays when they talk about being a "coder"? It seems everybody want's to build stuff before understanding the fundamental
by alberich 14y ago
I don't get it. What do people mean nowdays when they talk about being a "coder"?
It seems everybody want's to build stuff before understanding the fundamentals of computing. I don't see how jumping right away to trying to build stuff for the web can make it easier for someone to learn to program. No talk about algorithms, datastructures, and so on.
I'm not dimissing this approach, I just feel like it is not the most productive in the long run. It may lead to the development of bad habits, cargo cult, and stuff like that, derived from misunderstandings of how computing works.
EDIT: as an example.. i had a friend that learned to program the way you suggested, though he lacked knowledge of basic stuff like recursion, ordering and search algorithms, and so on. He sure could get things done, but not rarely the approach used had extremely bad performance or did things like modifying data shared between threads in an unsafe maner.
- fks 14y agoTotally agree with you that the skills learned from messing around won't turn you into a fully skilled programmer. My argument is that if he'd learned algoritms, recursion, data structures, etc. he probably would have hated and dropped it, while instead he at least knows something, has the ability to teach himself more, and hopefully has fond memories. It's much better to foster a true interest in programming - even if they're not very good - if it will then lead them to improve themselves and enjoy doing it.
- rtfeldman 14y agoYeah. And as a newbie, which sounds like the more plausible path to successfully becoming a real programmer? 1. Can't do anything -> Learn to build stuff -> Learn to write good code 2. Can't do anything -> Learn to write good code -> Learn to build stuff Plenty of folks need the motivation of seeing what cool stuff they can build to make it through the dry parts.
- IEatShortPeople 14y agoMy (heavily biased) recommendation - start with c++ or some other annoying, slow language. I know other people say learn python or ruby, but I think that makes for sloppy programmers and bad habits. First, read Introduction and Basics of C++ in the link below. Then make a text based rpg with 1-2 rooms. I would have a character and two bosses each with with power, toughness, and 1-2 attacks. Then read Compound Data Types and Object Oriented Programming from the link below. Finally, revise the code of the game to use objects (don't worry, that will make sense once you finish reading). Also, to emphasize your bossness, say that are "refactoring" your code. As a gamer, I thought it was cool that I could make a simple game like this. Maybe you won't. In which case, my suggestion probably is worthless. But, I think that learning a more systems level language will force you to think more about your code and make you write better code in the long run. Links: tutorial - http://www.cplusplus.com/doc/tutorial/ http://www.cplusplus.com/doc/tutorial/ compiler - http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-products http://www.microsoft.com/visualstudio/eng/products/visual-st... - if you are on windows. If you're on linux, install g++ (sudo apt-get install g++ for ubuntu/debian and sudo yum install gcc-c++ for Fedora). If you're on a mac, no idea, I don't use macs.
- PavlovsCat 14y agoI actually agree with making game-y stuff just for fun, because it allows you to think up and build rather intricate architectures real quick. It's hard to make a game as a newbie and not have it turn into spaghetti as you keep making it more complex, but it's also no biggie, and you get to learn how to recognize those things, what to improve etc. Practice with games, when you become more confident make applications; to me that makes sense? Playing games may be a shallow pastime, but making one can become more hardcore than one imagined real quickly. Just about anything in programming you could mention, certainly all the "pedestrian" things, could theoretically be put in a game - but a game can also be just two rectangles and one circle, and in that spectrum, and the absence of even the pretense of being useful, lies a great opportunity for experimentation and learning. Make a simple clone of a game or application or graphical effect you adore, and go from there. There's still plenty of opportunity to suck the fun out of it later :P
- ditonal 14y agoAs always, it depends on the person and their specific goals, but I think diving in before learning the fundamentals is a better strategy for the reasons he's getting at in the blog. The biggest decider in whether you will be successful at a new skill is if you put in the hours, and you are more likely to put in the hours if you are having fun and engaged. If putting together a crappy web app makes you stick with it better than learning data structures, then it's better. Plus, for the majority of us, the end product is the real goal, and we only care about algorithms as far as it helps us achieve those goals. Lessons on code maintainability and algorithms will seem much more relevant and engaging once you tried to add features to your spaghetti code base or figure out why your application was so slow. Also, for some people who have a specific end goal in mind, maintainability or algorithms really don't actually matter because they have smaller goals. To me it's similar to learning an instrument. Learning scales and doing finger exercises may be more useful practice than just playing songs you like all the time, but again, what's more important is that you consistently practice. As you learn more songs, you might struggle on parts or want to improvise and then you will be more engaged to learn technique or scales, and some people will be happy they can strum a few chords and never worry about more. In short, 1000 hours of mediocre practice will usually beat 10 hours of perfect practice, especially because the mediocre practice provides the motivation for the perfect practice.