Ask HN: How do I become a Software Developer?
I'm 24 Y/O and have no experience with developing software whatsoever.
I graduated High School 7 years ago and didn't have a plan in mind for the future. Recently I've realized how much time has passed and how little I've done to improve my situation.
5 years ago I worked as an intern doing QA Testing at some startup and it was a fantastic experience which opened my eyes to a world that I knew nothing about. But since then I haven't made any moves towards becoming a part of that world.
I honestly feel quite disgusted with myself for not challenging myself mentally, for not having a career at this point in my life and not having money. I guess being unemployed for the last 6 months has really given me time to reflect on myself.
I have a plan in mind, which basically consists of throwing myself into programming for however long it takes until I become proficient in whatever language(s) I choose and then crafting a portfolio. But my dream is to build something of significance that will not only change my life, but the lives of others around me as well.
However I'm starting to think that maybe I'm not good enough and that it's too late, especially when I read stories of people younger than me kicking butt and taking names.
Math was never my strongest subject and if I had to go to college, there's a good chance that I'd be placed in remedial classes, just to give you a picture of where I currently stand. But I realize that the internet provides me with nearly unlimited resources to improve myself and achieve my dream.
My father and I fell out recently so I'm finally on my own, which is a good thing because now I really have an incentive to go all out, so to speak.
I'm lost and would like some guidance. I lurked for 2 years or so and decided to create an account today to post. I'd like to hear your story of how you got into Software Development and your struggles along the way. I'd also like some feedback on the best way to go about making my dream a reality.
24 comments
[ 2.9 ms ] story [ 42.8 ms ] threadNext, since you want to learn to code:
https://www.google.com/search?q=learn+to+code
I honestly don't mean any of that to be mocking. I am just saying, a lot of people fail because of distractions from their primary goal. So now you have to ask yourself, what are you willing to give up? Are you willing to block out all of those distractions so you can start to learn a new skill? Only you can decide that and only you can make yourself fail if you don't.
Next, start building something. Honestly, you don't need to understand math at some high level to build great software applications. Go pick something and build it. Look at Jennifer Dewalt (http://blog.jenniferdewalt.com/). She set out to make one website per day for 180 days and blog about it. Imagine the amount of dedication to complete such a task. And look at how much she learned in that time! Just pick things are build them. Learn. Grow. Start right now.
You're right, I wasn't coding.
I waste a lot of time on the internet not being productive, so I'll change this. I signed up for a codecademy account recently, so I'll challenge myself by doing some exercises there daily.
>So now you have to ask yourself, what are you willing to give up?
I think I'm finally ready to give up all of my distractions. I'm getting sick of not making any progress.
>Look at Jennifer Dewalt (http://blog.jenniferdewalt.com/).
This is great. I bookmarked her website and I'll check out her work. Maybe I'll do something similar once I feel capable enough to build something.
>To be frank with you, start working, hard.
>Learn. Grow. Start right now.
Thank you :)
I'm currently 29, working as a Software Developer, and also started late. Got my MSc in Oceanography, had some basic programming experience (built basic websites for beer money, some light scientific programming), but not much. Decided I liked the analytics more than the rest of science, and got a job at a SaaS company as a Data Analyst. Really started falling in love with programming quickly there, and did the following: - took online courses like crazy (often waking up early to get some in before work, and more on evenings/weekends when possible) - always took on the most technical tasks at work, where I'd get to write as much Python/R/SQL as possible - started a coding club at work, great for group learning and motivation
After ~2 years of this I had gotten myself to a point where I could legitimately work as a Software Developer, and got a new job as one (at the same company). Stayed in my area of expertise, data science/analytics, but as a developer instead of an analyst.
I wouldn't suggest codeacademy, though. Maybe it's changed since I tried it, but my experience was that they introduced you to a bunch of syntax, but left out most of the fundamentals of how computer science and how to structure programs. I'd much more strongly suggest taking more involved courses. Some of my favourites include (note - bias towards Python, Scala and SQL courses, as that's what I happen to use a lot of):
Intro to Comp Sci (Python) https://www.udacity.com/course/intro-to-computer-science--cs...
Intro to Web Dev (Python) https://www.udacity.com/course/web-development--cs253
Data Structures and Algos (Python): http://interactivepython.org/runestone/static/pythonds/index...
JS intro: http://eloquentjavascript.net/
Functional programming (Scala): https://www.coursera.org/course/progfun
Reactive programming (Scala): https://www.coursera.org/course/reactive
Good databases courses (boring but good content): https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/abou...
My personal feeling is that things like codeacademy get you superficial knowledge, like learning to use tools, when what you really want is deeper knowledge about how to build houses, regardless of the tools.
Luckily, there are tons of great resources out there to learn to make whatever you want. Don't be overwhelmed by what's out there. Although HN is a fantastic place to keep up with what's going on, it's very easy to get caught up in the noise.
Learning to write software is like learning to do anything else. All it requires is practice. I was fortunate that I went through a university and it opened my eyes to a lot of theoretical things, but I am where I am today because I spent a lot of time outside of university learning things that were more practical.
I can point you to a few resources to get started (there are plenty more that people here can recommend!)
Generic Programming: https://www.codecademy.com/en/tracks/python http://openbookproject.net/thinkcs/python/english3e/
Web: Ruby on Rails - https://www.railstutorial.org/book Railscasts - http://railscasts.com
At the end of the day it depends on what you're interested in and what you want to make. I find that when I want to learn something new I try to remake what someone else has already made. That way I'm thinking less about the idea and more about how that software should be constructed.
Being a dev involves a lot more than just coding; communication, organization, teamwork, etc. all go into development. These are skills that are harder to pick up from the internet than coding. It is for these reasons that I would recommend that you consider going to school as a good way to start your career. School is a clear cut path in a situation like yours where you are going from basically no experience to starting a career.
School is not the only way, but I personally would bet on it as the better outcome. Do not let math be a deterrent. You can learn it. Check out Barbara Oakley's book A Mind for Numbers and read Lockhart's Lament. It does not have to be an impediment. Finally, as you mentioned there are a lot of resources online. MIT Open courseware has a lot of awesome resources, especially the intro to programming with Python. Coursera is also obviously awesome. But if this career were as easy as spend 6 months or a year studying and come out making $100K then everyone would be doing it. You need a more realistic plan.
So you have a general direction: software development. Now make some short-term and long-term plans about how to lead a good life and do what you're interested in along the way.
You're right that I don't know much about development and that I might not like it.
I grew up on the internet, from the days of AOL chatrooms during the 90s to various other websites and message boards. I learned how to repair computers as a teenager because of the internet and my interest computers. Now I can function as an (entry level) I.T. Technician. I focused a lot on maintaining hardware, software and Operating Systems, but never looked into creating software until pretty recently.
But what really got me interested was what Edward Snowden did. Because of his sacrifice I started to get interested in cryptography and open source software. I moved away from Windows to Debian just to experiment, and it turns out that Debian is actually pretty cool.
I believe in the utility of the internet and computers. To me, it just feels like the right step to take and even though I may regret my decision in the future, I'll still give it a shot and try to accomplish something. Besides, it'll be nice to challenge myself with a new hobby :)
I'll check out the book and course recommendations. I'm probably using math as an excuse to continue procrastinating because I'm afraid of failure, so I won't let that deter me. And I'll definitely consider going back to school once I start working again.
Best of luck. You can do it!
I don't have kids, but I certainly can relate. My family immigrated to the states from the Caribbean, making me a first generation American. They aren't well off and even though we aren't that close, I'd like to be in the position where I can assist them and their kids if they ever need help. I feel that the best way to do this is to pursue this path that I've chosen.
> I spent about two years working at it in the evening hours before I was able to land my first real job.
That's impressive. Thanks for the inspiration.
I know that nothing in life comes easy and that basically you (sometimes) get what you put in. I was uncertain yesterday, but I think today I'm ready to take the first step towards this crazy dream of mine.
>Best of luck. You can do it!
Thanks! And good luck to you as well. :)
Once you've exhausted the features you can add to a music app, you can execute any idea that you come up with that utilizes the Internet, sharing, etc. You won't necessarily become a master of 4D printing, but any theory you have about anything you can test and create a physical representation of on the Internet. Don't rush building it for the sake of finishing. Learn and understand what you are doing and your next project will have the potential of promis. I spent 3-4 months working on a website that I knew had no chance of becoming anything. However, I just kept smashing my head against the wall and making it better while slowly but surely improving my skillset to the point where new things now come easily, because I understand the philosophy. Now that I have moved on from that initial music website I can now pursue much more innovative and intellecutually stimulating projects (which I wouldn't have been able to do had I not spent so much time on a project that I knew had no chance of success). Give yourself a throw away project, commit yourself to it, and use it as training for the next one. If you truly commit yourself, you should be able to build pretty much anything you see on the Internet 1 year from now. That is not a guarantee! But you have plenty of time and there no reason not to believe that you cannot.
I find myself enjoying coding more and more each day and IT support less and less. But I "know" IT territory very well. From IT managers, to day in day out, to projects one cam expect. I live and breathe it. I feel out of my depths even applying or building a resume for a development job and have a family to support. What's the safest and best way to get my bearings and jump into a dev job?
Work is supportive of my advancement in coding, but its leveraged as a cheap way to automate processes.
You are the magical "DevOps". Put that on your resume and wait for the offers to flood in. Just tell prospective employers that you want more "dev" than "ops".
I think the thing that got me where I am now within a reasonably time period is picking a type of technology (in my case, it was learning iOS and Git well enough) I wanted to work with, then stick to that until you become employed while attending every hackathon and relevant meetup, time permitting. You'll need projects that demonstrate your aptitude and ability.
If you or anyone else is interested, my story is actually on Codecademy: https://www.codecademy.com/stories/155-from-lawyer-to-ios-de..., and I've even written a book about the transition: http://quitlawandcode.com/
You're going to do fine. I know it seems like such a binary and insurmountable transition, but the more hours and practice you have, the more OOP and other concepts will just click for you. Also, you're not too late! I started at learning at 30.
FYI: I'm terrible at math, though I love learning, and would like to re-visit it when I have some more time (probably when I have high school aged kids).
Figure out what you want to learn/build, and just start. When you hit seemingly insurmountable roadblocks, just take 20mins away from the computer and come back. Stick with it, have a long run view rather than a short run view.
I then took a pay cut to get a job as a tech support guy at a tiny local internet provider. Over the next couple of years the company merged with a bunch of other small ISPs and I found myself given more responsibility. Not liking all the paperwork this involved I wrote some web based tools in perl to make my life easier. This was noticed, as was the fact that I was cheaper than a "real" programmer, and when they wanted to expand the dev team I was given the job. Now, after more than a dozen years and quite a few different organizations I'm a team lead on a pretty large and successful system.
I guess the point of the story is to build stuff, especially stuff useful to you right now, and don't be afraid to take risks.
- Ignore gatekeepers (The programmers at this first job ridiculed me when I was asking programming questions)
- When possible find a partner / mentor that you can learn form and with and whit whom you can motivate each other
- Keep on learning really hard, don't settle
- Show some fucking passion and good things will happen :)