How did you go from being an adequate to exceptional programmer?
I'm new to web development and am primarily self-taught. I know enough to get my own site live, make it look good, and make somewhat nuanced decisions about its architecture and the best method for accomplishing X task.
But now I feel stuck. I just started working full-time as a software developer (!) and was hoping this experience would help me learn a ton--however, for whatever reason, work is relatively slow and I end up doing what I already know or am left out of any "teaching" going on.
I'm a little nervous I'm stuck when it comes to my skills and don't know what to look/ask for next. What experience/situation allowed you to learn the most? Was it an awesome mentor, a great freelance project, some course you took? Is it something I could find at work or does real learning come when you're working on your own projects?
21 comments
[ 4.6 ms ] story [ 75.4 ms ] threadThe notion of there being a wizened old man who just sits there and "knows everything about it" is, if not a myth, exceptionally rare.
Sure over time, bits stick and foundations build and you grow to be relatively expert on some topic. But if you stand still or grow too comfortable with what you've got, these days the world will move past and leave you behind.
Check out http://blog.jenniferdewalt.com/post/56319597560/im-learning-....
When it comes to programming,learn to break things. In programming, it is easy. Put bad code on purpose and see how and why it breaks ? I remember one of our excellent CS professors who told us that the best way to learn pointers in C/C++ is to write pointers that don't work. Leak some memory. Create null references. I never understood that for a while but now I do.
Oh and the common advice: practice practice, practice. Do the same thing over and over again even if it is repetitive. Again to give you an example, I was really good at Math as a kid and I remember I got even better when one of the teachers gave me a book in which for every topic, there were 50+ questions that were very similar. he wanted me to do all 50 of them. I was like "why cannot I just do 3-4 of each type and move on to next". But again, after doing the 50, I mastered it.
Having said all this, I don't think I am exceptional at most of the things (certainly not programming) but I am so sure that these are some of the actions that makes one exceptional.
To answer your questions, I find awesome code and techniques through books and from the internet. Keep reading new books even if you have become familiar with the language. Try working on your own projects because different problem sets demand different way of solving things which will not be offered through normal work environment. Write small games, puzzle solvers, etc. Understand how things work and be familiar with the tools which you can then incorporate back to your work.
Another way of improving your programming skills is by learning a completely different programming paradigm. That will make you think differently when solving problems even if you don't end up using that particular language.
Thanks for your thoughts. :) I think I definitely need to focus more on building my own projects if just to keep practicing what I do know and have the opportunity to build something more complex.
Now I should state that all these things are with respect to how to learn things, not with what makes the best employee/product.
1) Getting a job where I could program/learn full time. Once I picked up the skill that other people hadn't learnt, then I became "the SKILL guy", which means that you get more work based on that skill, which lets you learn even more.
2) To learn things, I would set myself the goal of trying to do every task in one language. And I mean every task, including tasks that it sucked at. Whereas other people just took the pre-written tool/software and used it, I wanted to see if i could do it from scratch. Its not the best way to do business, but its the best way to learn something inside and out.
3) Plain stubborn persistence and realizing there are no hard problems/theories/techniques, just ones you haven't spent enough time studying and getting familiar with. Its ok not to know or understand things. What's not ok is to run away from them because you don't know or understand them. There's a lot of fragile egos in programming/academics/business where people try to insinuate that because they don't understand something its "not worth knowing/is useless", or that you are stupid for not understanding what they understand. Forget all that and just keep bashing away at a topic, looking for different opinions and perspectives on how to pick it up, and when you understand something on your 8th go, you're now on equal footing with the person who understood it on the 1st go (if there ever was such a person, and there often isn't).
4) Always pushing my self into the things that I can't do. This is a bit weird, because most of our school systems condition one to do the things you score well at and avoiding the things you fail at. Screw that. You might get good grades and a job but you will never grow as a person that way. If you're only given projects you "can do" at work, try to mix it up by doing it in a way, or with a language, or with a perspective that you can't currently do.
I especially appreciate #3. Thank you. :)
It is important for a Software developer you must be willing to work outside of their comfort zone. Technologies are constantly changing, and as developers we must execute integration or updates that we have never done before. By pushing yourself to try new things, you end up being exposed to more code and alternative ways of tackling issues. This drive to constantly learn and do new things that makes the difference between a good developer and a great developer.
Don't be afraid to break stuff. Breaking things is an important part of learning process.
Don't try to be great. Being great involves luck and other circumstances beyond your control. The less you think about being great, the more likely it is to happen.
For me, the only way to become really good at something is to keep learning, and to ensure that you know of your own failings. If you don't know what you don't know, you won't try and fix those holes in your knowledge.
If you are aware of what you suck at, it's easy to pick that knowledge up through experience. If you are going through the motions and aren't finding yourself challenged, it's extremely easy to not learn anything of use. An exceptional programmer will have probably spent most of their careers working on problems they didn't know the answer to, and as a result have built up a huge body of knowledge.