Ask HN: I am busy with too many things at once
A couple of years ago I realised I was a mediocre programmer. After 5 years of work experience with unfinished degree I knew only one language (php of all...) and some good practices on a surface level. I set that for change. For 2 years I studied in my spare time, learned a bit of Java, go, clojure, learned some fundamentals and good practices classics (gang of four, DRY) started reading blogs and following the industry.
Except, it's too much. I realised I am into too many things. I know a bit of everything, but not too many things well. I want to study data science, maths, devops and find that my desire is driven by fear of becoming outdated and irrelevant. I would appreciate a piece of advise on managing the learning process, get the joy of tinkering back and conquering the anxiety of ever changing rules to the game. Thank you.
[+] [-] uniclaude|10 years ago|reply
As someone who's been at it for years, I'll just give you one little piece of advice. If you've already been through the fundamentals, you've done enough. Now, instead of focusing on learning technology, focus on building things, this is what real engineers do.
Let me explain. You'll probably get much better with at least one thing once you ship a real project to the end, and this is where you'll get better.
One of the best programmers I've ever worked with was a PHP guy when I met him, and he was good because he shipped efficient, tested, and working code fast, all while being able to document and communicate about it with his team. That's what being a programmer is. You won't become a good professional programmer by chasing after hip technologies (even though learning different paradigms always help), but by building things, and preferably with people, because this is how things work in the real world.
As long as you stay with startups and technology companies, you'll see that any CTO or lead dev worth his salt would rather hire a smart Perl programmer with strong fundamentals who shipped things over someone (maybe smart too) who knows a bit of JS, a bit of Java, and a bit of Haskell. This is, however, not true with a lot of non-tech companies, where keywords on resume, a professional-looking attitude, and some good sales skills will usually get you better positions.
It's never too late, don't fear irrelevance, build things, and have fun!
[+] [-] deepaksurti|10 years ago|reply
+100. I did exactly this. After working for 12 years, took a break, learnt 3D game programming and actually shipped a playable 3D sport simulation game on iOS. Enjoyed graphics programming a ton. Also prototyped the game in Common Lisp before porting it to iOS.
End result: I now work as a scientific software developer specializing in 3D visualization all thanks to the graphics knowledge gained in the process of shipping the game.
So I would say once you have covered enough fundamentals, you must ship something you think is hard but just harder and not completely beyond you.
For me the fundamentals are: 1. Multiple programming paradigms 2. Algorithms 3. Data Structures 4. Digital Electronics 5. OS 6. Networking and 7. Math for CS. This will take a lot of time. I invested a lot in 1 - 4, skimmed 5,6,7; shipped a game and things unfolded.
[+] [-] collyw|10 years ago|reply
How many job offers do you see looking for a smart Perl programmer. How many do you see listing 10+ technologies, plus experience in scrum? (Does doing a stand up every day make you better at it? )
[+] [-] eru|10 years ago|reply
By the way, these things are hackable, too. It only takes a bit of practice to become a better salesperson than most programmers, and only a small amount of effort to look more professional, too. (And a good suite can even be comfortable.)
[+] [-] unknown|10 years ago|reply
[deleted]
[+] [-] detrol2k|10 years ago|reply
[+] [-] endymi0n|10 years ago|reply
http://www.invokemedia.com/wp-content/uploads/2013/06/venndi...
It's really all about focus. Learn one thing at once. Rinse and repeat, and come back to the topic later for more insight.
https://en.wikipedia.org/wiki/Spiral_approach
Don't be afraid to say "I don't get that (yet)." - for me it's a sign of quality in an engineer, if he realizes he doesn't grasp a concept yet.
All others are struggling too, even the best:
http://fourhourworkweek.com/2013/11/03/productivity-hacks/
In the end, if you're not embarrased about the code you wrote half a year ago, it's a sign you're not progressing.
[+] [-] nchelluri|10 years ago|reply
I just can't agree with this statement at all.
I have written loads of code years ago that I am not embarrassed about, but I feel that I am definitely a better developer than I was some years ago.
I really liken code to writing of any other sort. I don't feel embarrassed about everything I wrote from a few years ago. My opinions and styles may have changed, but it's not all crap. Some of it definitely is crap, though.
[+] [-] maze-le|10 years ago|reply
Interesting opinion. I have that experience often enough when I look at rusty old code of mine. But I always was under the impression, that this is something of a problem, not a good sign...
[+] [-] Terr_|10 years ago|reply
[+] [-] microtonal|10 years ago|reply
Both are true: there are simply too many subfields if you want to excel in all of them, for any particular subfield there are people who are much better than you are, because most of them have invested a lot of time to become an expert.
My first advise would be to get the basics right: many commonly-used algorithms and data structures haven't changed the last 20-50 years. If you know then inside-out, you know what to pick to solve a problem. Get a good book on Algorithms & Data Structures or follow a course or two.
My second advise would be to pick the area that interests you the most. Read the foundational books, follow the leaders in the field, and do projects (they are good practice and help you to build a portfolio). Put a strong filter on the stuff that irrelevant to your chosen area (only read the most interesting bits). You will find that you quickly change from novice to expert in your area.
When it comes to programming languages: it's fun and useful to know some languages. But in the end what you ship is more important. So, just pick a language that feels natural for solving the problem and don't get too distracted by armchair PL philosophers ;).
[+] [-] gonzo41|10 years ago|reply
[+] [-] panjaro|10 years ago|reply
Reason: I thought I wasn't a good developer. More I read HN, articles, stories, more I got anxious and left my job to pursue research degree. I figured out I lacked mathematical abilities to do research in the field I wanted to. I became depressed and I felt regret all the time.
After 7 months, I realized I was chasing the horizon. I have realized it's not the new things you learn or the awesome technologies you learn that matters. Things that matter are: Being good at what you do, whatever it be...some people spent life juggling balls. They aren't genius in maths, science etc. but they are awesome at what they do. It makes you feel wow !
Second, it's about being happy. If you are writing this post in HN then you belong to very privileged class of people in the world. Be thankful for what you have. Love your family, friends. That is what matters. It doesn't matter what technologies you learn when you turn 60-65. All that matters is the happy moments you have shared with your loved ones.
Third. Don't take what's written by founders or geniuses seriously. Read, acknowledge and move on. If you question yourself over what others are doing and learning, you will be in mental hospital soon. So take things easy.
Last month I took a job in a company. Technology wise it's crap. No process. But everything works there. People get things done. We laugh, chat and go home early. I go to gym after work and sleep well after I come back. I enjoy time with my wife on weekend and thank god for this life.
It doesn't mean I'm doing nothing. I have compiled a list of books I want to study. I have read 2 chapters and I started a small project for fun. These are the only two things I'll work on..but no rush....slowly. After all they are last things I have to worry about in my life. First things first - Enjoy life and be happy.
Lastly, watch this - https://www.youtube.com/watch?v=OCvAl2Vr7as
and See how happy and cheerful she is. She isn't scientist or math genius or a great programmer but she is awesome at what she does. Note her answers to questions.
[+] [-] mbrundle|10 years ago|reply
Now I'm combining the two - learning some new stuff during my commute, putting it into practice at work - and at the same time, making sure that my evenings and weekends are free to spend with my family. Right now I couldn't be happier - I feel that I'm finally beginning to develop as a software engineer, but I can maintain a nice work-life balance too.
Totally second the other posts here - learning is good but you really need to be working on building something, because that allows you to really consolidate when you've learnt. It's when you spot the perfect application for some theory you learnt in your project work, and you can execute that application, that you really start getting somewhere. IMHO. :)
[+] [-] mikekchar|10 years ago|reply
- I realised I was a mediocre programmer
- ... (I) find that my desire is driven by fear ...
The first is a good feeling :-) Too many programmers don't have this realisation. Embrace it!
The second is something that worries me slightly. All of the programmers that I know who are driven by fear let it chase them into failure. Getting the "joy of tinkering back" is what you need. Forget the "ever changing rules". Chase what you love and forget about the rest.
Now for some specific advice. You are at a level now where you need to integrate your knowledge, not learn bits and pieces. Stop everything else you are doing and start a major project that will occupy your time for the next year or so. It doesn't matter what it is, only that it is something you love. This will help you more than anything else.
[+] [-] amelius|10 years ago|reply
That would be pretty hard if you'd be working on a 20+ year old legacy system written in COBOL.
[+] [-] prostoalex|10 years ago|reply
Also, this http://www.bothsidesofthetable.com/2015/06/19/why-successful...
[+] [-] deckiedan|10 years ago|reply
Write a production-ready library in a language you are interested in, complete with unit tests, follow best practices, write a set of good documentation, etc. for it. Put it on github, in the language's package management system, and see what happens.
Finishing stuff does really feel good.
[+] [-] eru|10 years ago|reply
If that is your genuine concern, I'd suggest focussing on timeless topics. Two easy rule of thumbs: (1) if it's been around for a while and still relevant, it's probably going to stay that way (eg compilers/parsers, operating systems). (2) if it's hard and math-y, it has a good chance at staying power, even if new.
In any case, do what adyus said: pick one thing, and ship, ship, ship.
Some inspirational reading: Peter Norvig's "Teach Yourself Programming in Ten Years" (http://norvig.com/21-days.html), Richard Hamming's "You and Your Research" (https://www.cs.virginia.edu/~robins/YouAndYourResearch.html). Or if you are of a more entrepreneurial bend, P.T. Barnum's "The Art of Money Getting" (https://www.gutenberg.org/files/8581/8581-h/8581-h.htm)
Happy to talk in private. My email is in my profile.
(Some snark thrown in for free: forget about OOP design patterns.)
[+] [-] MarcusP|10 years ago|reply
[+] [-] garrettheaver|10 years ago|reply
I've often found that if I tried to do something because I thought it would be good for my long term career prospects I just wasn't that motivated. However I often found myself circling back to the same technology or topic at a later date out of pure interest and was highly motivated then. Attitude toward what you're working on and your reason for doing it is almost everything.
Sounds like you're maybe feeling a little burnt out if I'm honest. It happens to all of us. Whenever it happens to me I either increase the frequency of my other hobbies I enjoy (water sports) or if its a particularly bad spell, try looking into some completely unrelated area of inquiry (for me that can be space, cartography, travel, electronics, brewing beer, etc - even learning a musical instrument). I find that it not only stimulates my mind again but ultimately I start to make new connections about how my existing software skills can be applied to this new area of interest. New project ideas start to flow... and off we go again.
[+] [-] vincston|10 years ago|reply
I'm still a student, studying computerscience and I'm almost finished. The problem is, my fun in computerscience is simply limited, sometimes it really makes a lot of fun. Sometimes it doesnt (Majority, since I am really unmotivated). Now. The problem is, I don't have anything I'd consider to do for the rest of my life. Was totally clueless after graduating from school and I'm still unsure. This just doesnt sound like a good future, but I really cant figure.
For now I'll just graduate from university. Any Advice?
[+] [-] nchelluri|10 years ago|reply
My eyes are bigger than my stomach. I believe that these days it's probably impossible for anyone to really understand everything.
Personally, I think PHP is a fine language when coded well (most of my PHP looks like my Java, though I haven't coded much PHP since just before the introduction of lambdas). I feel like it undeservedly gets a bad rap, perhaps because it's so easy to write horrible code in it. But that is just evidence of its complete accessibility in my books. I think that some of the coworkers I had at my PHP jobs would agree that it is an adequate tool for the job of web development (some people even use it for other purposes, but that's not my style).
I wish I could give you some solid advice, but I don't feel qualified to do so. I will say, however, my favorite experiences in programming have always been upon completion of a project -- seeing it go live, get real users, and actually work, from start to finish. Most of those times have been in my professional career where I was paid to complete something and had a hard deadline (that has nearly always slipped), but a few have been school assignments and personal or open-source projects that have 0 or nearly 0 users. Sometimes solving a problem or scratching an itch is just the thing I need.
Also, in nearly every case where I've shipped production code, I look back on it fondly some years later (especially if it is still running and getting used) and think, "damn, I must have done an incredible job. I got everything just right." But on the rare occasions where I get to look back at the source code, it's always got plenty of TODOs lying around, and things I wanted to fix, stuff I would do if I had a bit more time but just never got to, etc. It's never perfect... but sometimes it still works. Memory is a funny thing.
Finally, someone linked this on a vaguely similar thread recently: https://www.physics.ohio-state.edu/~kilcup/262/feynman.html - I thought it was great.
Here's that thread, BTW, which you may also enjoy: https://news.ycombinator.com/item?id=9796203 -- some really quality responses on there, IMO.
[+] [-] kirang1989|10 years ago|reply
Feynman is a lovely example to follow for anyone wanting to become an engineer. The book is one of my all-time favorites.
[+] [-] swsieber|10 years ago|reply
An airplane pilot once told me that when young airplane pilots experience turbulence, their reaction is to speed up to get through it faster. That makes the turbulence worse. An experienced pilot will slow down because it reduces turbulence and makes the trip enjoyable again.
Edited for clarity.
[+] [-] ak39|10 years ago|reply
Zen for the 21st century.
[+] [-] ibash|10 years ago|reply
1. It's always changing
2. Feel confident in that something that you learn will become relevant again
3. You can't know everything
In addition, find a team that will help you learn and practice everything you are interested in. Look for a company/team where individual engineers have to wear many hats.
[+] [-] hv23|10 years ago|reply
[+] [-] mordrax|10 years ago|reply
I think this is a good question that everyone at some stage of their life will need to ask to grow beyond what society and peers demands of you, but don't make this out to be the silver bullet like I did because I'm still on that path and I have no idea if I'm getting any closer to an answer... damn! hehe
[+] [-] elorant|10 years ago|reply
Your fear of becoming outdated is well founded. We’ll all become outdated. That’s why every five years or so we learn a new language. That’s the fate of the IT industry, things change and sometimes they change too fast. We learn to adapt. But once you learn a language pretty well you’ll realize that there are commonalities between them all. Learning a new one is a matter of weeks. So stop worrying too much.
My last advice would be to choose a project and focus on it for the next two to three months. Stop reading and start implementing. That’s probably the hardest part. But it will help you get in grips with the language of your choice and feel more comfortable and self-confident. And it will also help you realize the path you wish to follow.
[+] [-] eru|10 years ago|reply
If you don't mind selling your soul, COBOL programmers get paid more and more because supply is dwindling. And I bet you dollars to donuts that COBOL will be around for longer than anyone's career.
If you care about your sole, it's a bit harder, but C will probably be around, too.
Some languages are worse than others. PHP is definitely in the worse camp.
Fully agree with the last paragraph.
[+] [-] nanuclickity|10 years ago|reply
In my 2nd year, I was selling website templates and earning good money. It required little knowledge of html, css, and js. It was good. But soon saturated my hunger. I read up on solving problems, from a development perspective. It's a lazy man's job but a brainstorming one.
Solving problems gave me direction. I proceeded to learn different languages for different tasks that were required. I read about implementing backend in django, ruby on rails, node.js and php.
In late 2nd year, I decided to work in a team, and solve problems as a team. I took the job on CTO, for various startups in college. Each startup would present a different problem.
Instead of learning it all. My direction became problem centric. Sure, most of my startups failed, I was working with resourceless people in college. And had to always be the one to start everything from ground-up.
Investing my time in too many startups, too many problems, too many languages ... hung me up on my degree. :P
Sure, you'll meet people who have a mindset that they'll get you to make the product and then ditch you. But I never cared about it. :P Don't feel bad.The world will always be like that. I got what i signed up for. :)
I am now a full stack developer by choice, I design my products, create apps and I have functional knowledge of most of the awesome frameworks. My journey made me work with deployment, asset management, managing servers, deploying hybrid apps, scrape data, building performant and consistent api’s.
It was a hard time. I will get my degree this autumn. Look at the bright side.
People always get happy when you can turn their idea into product in <15 days. :) Just solve problems… and you’ll emerge as a magician. :D All the best !
[+] [-] _xnmw|10 years ago|reply
[+] [-] yitchelle|10 years ago|reply
The question that I keep coming back to is whether I am doing the things that I find interesting and engaging. The answer is an absolute YES. However, if I need to do something else where I would need to learn some other language, or technology, so be it. It is all part of the process.
My advice is to slow down, and focus on your interest and passion.
[+] [-] polskibus|10 years ago|reply
[+] [-] adyus|10 years ago|reply
But the main focus should be to get something working.
[+] [-] kluck|10 years ago|reply
I think it boils down to weither you keep track of all your projects (what's to be done next), that you do not try to plan ahead too much and that you do not plan too many tasks for a single day. If you stick to these guidelines there is a high probability that you get a good experience ("did that, finished that") every now and then which keeps you going.
[+] [-] joeyspn|10 years ago|reply
Same for some of us. In my case, I'm busy building too many side-projects, and I do it just for the sake of learning new stuff, I have a lot of fun and it works!
With 5 years you're just starting. You need to pick an idea related with 3 or 4 fields you want to learn (Data Science, DevOps, etc) and build it. For example: An app that analyses tweets from a twitter stream in real-time and applies predictive analysis for certain (or funny) topics. You can use docker containers and setup a CI server yourself.
It must be an idea that excites you. Build it from a paper sketch, to a MVC app, to CI server. You'll learn along the way, bit by bit, don't rush things...
This is very effective for learning, and there's also something special seeing your small (or big) ideas come to life. You'll get an enormous satisfaction...