5 ms·
I want to be a software developer. Where do I begin?
i would really like to learn how to program and develop production-ready software. i would like to begin with PHP and either concurrently, or subsequently, learn python. how do i begin? the purpose of my learning is firstly to be able to personally work on developing features and apps for my e-commerce site which is based on joomla (it was developed by professional developers).. the second purpose is that i want to be able to apply for software/web developer jobs eventually because i'd like to work in that field.
i don't know if it's relevant but i'm currently using a windows machine, and i've often heard from people that windows is a terrible environment to learn programming and to program in. is it necessary for me to get a mac or linux machine?
and to reiterate: where do i begin to learn how to develop production-ready software, i.e software that is ready to be shipped? i've done codecademy and similar stuff before which seems really simple and easy, but i can't figure out how to translate that "knowledge" from those sites into actually writing something useful and "shippable".
- skrebbel 13y agoWindows is fine for development. Tons of people do it, it's just not hip & trendy on hacker news. Don't waste time on learning a new OS if what you really want to learn is code. Both PHP and Python have first-class support for Windows, and so do most other tools (databases, webservers, etc). Best way to learn is just by beginning. Set yourself a relatively modest goal. It can be useful even if it's modest. Something you need, maybe for yourself, or for some community you're in.
- Raphmedia 13y agoThree options in front of you: 1. Get into a class. 2. Books. 3. Online classes / screencasts (the best have you do exercices too.)
- gearoidoc 13y agoWhat have you tried so far? If the answer is "nothing", then you need to start YOURSELF. Being a "self-starter" is CRUCIAL to becoming a good programmer. You'll only discover your favourite languages/techniques/etc yourself by trying them out. No one is going to lay down the pathway for you (ie. Do X, Y & Z). Windows is fine for development. I find OS X easier to configure but thats probably because I only switched to Mac after having several years experience. There's nothing different than "production-ready software" and any regular old software. Production ready suggests that it has been tested - that's about it. Tons (in fact far too much) "production" undergoes no or very little testing so I wouldn't get hung up on labelling. Make something, anything.
- malditojavi 13y agoBe curious.
- Bahamut 13y agoI first learned on Windows - I have subsequently found that it is far better to do development on OS X or Linux & prefer to do so now, but nothing is really preventing you from doing dev on Windows. My approach to learning was to absorb as much as possible as fast as possible. I spent time trying to learn PHP, Ruby (for usage of Rails), and JavaScript. I did not do anything with NodeJS then, but I did learn how to manipulate JS to accomplish things I wanted to do. I did not know best practices, or was comfortable with OOP. If you want to learn web development, try building the websites you want. That is probably the best learning experience to start.
- philwelch 13y agoIf you're worried about using Windows, you'll likely be fine running a Linux VM on your Windows box rather than getting a new box.
- charlieirish 13y agoA few tips that have helped many in the past: - Start small - Don't worry too much about the language - Start with some free sources e.g. KhanAcademy, Udemy, libary books - Have a very small project that you can use to learn - Carve out some time each day/week to work solely on your pet project - Ask questions - Find a mentor - Don't give up. Everyone starts at the bottom.
- imdsm 13y agoI think the main thing with this is that is has to be a lifelong activity. It's not something you can do for six weeks and 'achieve', but more, it's a continual learning exercise that never ends. Start programming, make things, read things. Eventually you will realise that you're pretty good. Be willing to put in years too.
- deleted 13y ago[deleted]
- mittermayr 13y agoOne advice from someone who has taught and studied this for over 15 years: Don't get tangled up on what's hip and cool now, it might be disastrous for someone just starting out. Here on HN especially, we obsess about exotic new languages and frameworks. But they often have very little support for true beginners. Even Rails/Ruby is a pain to setup and understand for a beginner, they make it look so popular and easy, but you'll quickly end up in a huge confused state of things you can probably not relate to each other. PHP would be my suggestion, play with it for a month and try to get as far as you can, get a grip of how things tie together and such. Then, you can re evaluate what other languages might be interesting or why certain aspects of framework driven movements might make more sense. Pick the easiest, oldest tool you can find and work your way forward, historically and all will make much more sense. Disregard your environment that first few weeks, Windows totally works, you don't need a web server, just use something local. Your dev friends will tell you PHP sucks and ruby is the shit, but consider that this does not necessarily translate to "when just starting out". The hardest part about programming is never the language. It's always the ability to know how to address a given problem, tactics. Later in life, you'll be able to use any language thrown at you, it's the problem approaching that really makes a good programmer. Learn concepts, how a web server really operates, how a browser works, that stuff. All a programmer does is building bridges between existing technologies and people (behavior).
- nyrina 13y agoSince he wants to start with PHP, I doubt he is going the hip and cool now route. No offense to PHP, but it really can't be considered hip anymore.
- wallflower 13y agoDeveloping production software is a function of how many times the software you write is "evaluated". Where "evaluated" can encompass peer review, customer feedback, formal QA, unit tests. The absolute best way to learn is to teach it. And the best way to do that is peer accountability. Whether through starting your own study group where you meet weekly to discuss/review your joint coding progress or joining a company which has an apprenticeship program as a core value. Good luck! Fail faster in the hands and care of those who are better than you. Also see http://jenniferdewalt.com http://jenniferdewalt.com
- westiseast 13y agoGood luck! Don't rush yourself and consider this a long process (1-2 years) not something you can nail in 6 weeks. In all honesty you might be a long way away from actually pushing code to your existing site, so put that out of your mind for a few months and start simple. I started with little things like a personal blog, tinkering with features on that, doing some fun and simple project websites, helping do HTML/CSS design stuff for other more complicated sites from friends (where you inevitably bump into backend and frontend code challenges) and then started building my own e-commerce site. Note that whole process was around 2 years. Get stuck into doing ALL of these things yourself (ie. front-end, backend, server setup etc.) because it will eventually help. I learned Python by proxy - starting with Django and then regressing into Python. I'd suggest you do something similar, because pure Python is perhaps too low-level for what you want right now (ie. pushing website code). And yes, Windows is a bit of a crappy environment to develop in. Lots of great open-source software is written by people developing on Linux/OSX and as a consequence, their code/documentation/communities tend to ignore Windows. You'll make stuff work more quickly, more easily and with more immediate help from the internets if you're using Linux/OSX.
- philosophus 13y agoThere are several CS101 type courses available on sites like Coursera, Udacity and EdX. If you already know the basics of programming, you might try an intermediate level one that incorporates a project. As for production-ready software, I'd start small then add things onto it. For example, if you have a simple Tetris game, try adding music or porting it to Android. Major software projects don't get built overnight and generally involve teams of experienced developers, so that's not something you're going to be able to do immediately. You might want to look into Agile development methodology. That shows a way to go iteratively from initial idea to something a customer would want to use.
- deleted 13y ago[deleted]
- teddyh 13y agoBeware of technologies which are over-complicated to the degree one suspects they are that way largely as a form of developer mindshare lock-in. You can very quickly get discouraged that way.
- jawns 13y agoSo I take it you didn't accept the full-time web developer position you were offered 174 days ago? https://news.ycombinator.com/item?id=6094641 https://news.ycombinator.com/item?id=6094641 Are you still planning to return to school for a CS degree this January, as you said you planned to? https://news.ycombinator.com/item?id=6450381 https://news.ycombinator.com/item?id=6450381 That would be a decent way to pick up programming skills.
- gotrecruit 13y agoyes, the full-time web developer position was turned down because i felt inadequate for the job. i only got the offer because i listed myself as "lead developer" for a project on linkedin, when in fact i did very little actual development. it was more of a personal project that i wanted to develop for, but ended up overwhelmed by how much i had to learn before i could actually develop anything useful. and yes, i do intend to return to school but it would be in fall this year, not january because the school that offered january admission did not make me an offer...
- gearoidoc 13y agoOut of curiousity, what makes you think you "only got the job" because of the title on LinkedIn? Did you consider that the company hiring maybe saw potential in you? Or maybe even existing ability that you don't recognise (our industry is rife with impostor syndrome)? Perhaps they realised you wouldn't be a lead dev but had you earmarked for a more junior role. My basic point is: be optimistic and courageous. The worst case scenario is you learn something. If there's one thing I've learnt recently it's that no one will hold anything against you for taking a leap of faith.
- gotrecruit 13y agowell, i guess i left out another detail which i didn't think was important since this thread isn't about that. it's a very long story so i'll just mention the important part but it WAS in fact a junior web developer position in NYC, which sounds awesome. problem? i am not a US resident, and failed to obtain a visa to return to the US after i graduated from college. i would have absolutely at least taken an interview if i was legally able to attend it.
- DanielStraight 13y agoIf you've done Codecademy, you should understand the basics (what is a variable, what are functions, etc). The next thing to do is pick a project and build it. A good place to start is something like a blog, or calendar, or some other simple application like that. Heck, an HN clone would be a good starting project. Once you pick a project, just take it one step at a time, asking for help when you get stuck. Don't worry about making it production-ready. It's inevitably going to be full of vulnerabilities and bad coding practices, don't worry about it. There isn't a programmer on Earth who hasn't looked at their own code from 5 years ago and thought, "What on Earth was this guy thinking when he wrote this???" Build a few projects and you will pick stuff up as you go. Once you feel like you really understand what you're doing, then you can focus on making something production-ready. For right now, just get a few things built without worrying about the details. Read this: http://prog21.dadgum.com/188.html http://prog21.dadgum.com/188.html When you're starting out, do that. Don't worry about full understanding. Get a solution out there, even an imperfect and brute-force one. Obviously, you don't want to stay at that level, but like I said, you're going to hate your code 5 years from now anyway, so don't worry about it too much. Read this too, the first quote on this page: http://www.goodreads.com/author/quotes/113989.Ira_Glass http://www.goodreads.com/author/quotes/113989.Ira_Glass
- gotrecruit 13y agoyes i feel that i do understand the most basic stuff, plus i've taken some programming-ish classes in college as well (such as VBA for Excel and another freshman class which also dabbled a little in basic programming principles). i'm just at a complete loss as to how to go from that basic understanding, to actually being able to write something useful and then subsequently be good enough to be hired as a junior or entry level developer. my ultimate end-goal is to develop software for my own startup because i have many ideas which i have previously tried to hire outside developers to implement, but failed miserably. i'll read those links right now! thanks!
- DanielStraight 13y agoI really think you need to start with a very simple project that you can see through to completion. Writing your own blog or calendar app is pretty simple if you don't try to add any advanced features (like WYSIWYG editing or something like that). For a blog, just make a new post page where you can type in a new post and then an index page that shows all posts. If that's too simple, make a log-in system and support for multiple authors. For a calendar, just make it so you can click a day and type in an event which gets stored and shown when you load the page. If that's too simple, do multi-day events and recurring events. Or build a week view and a single day view as well. This is the kind of project you would build in classes. It's the only way to really learn how everything fits together to make a full web app. Learning on the job is pretty much the only way to really learn software development.
- tgflynn 13y agoIt's a little hard to tell from your question where exactly your problem lies. If you've done codeacademy I assume you've already got some coding skills. You say you don't know how to apply those skills to doing something useful. I would start with an idea for something you want to do. You have an ecommerce site so I'm guessing you have some ideas for improvements you'd like to make to that site. I would start with one of those ideas (hopefully a reasonably simple one at first) then try to figure out how you would code that. Implement your change (in a development/test environment, not on your live site), do some testing and when you're satisfied your code is working push the changes out to your live site. I'm not exactly sure what your hangup is about "production ready" code. As others have said there's no special magic that separates "production ready" code from any other code other than testing and reviewing your code to make sure you're following security best practices (which should be pretty easy with today's environments, the frameworks typically provide you with simple methods to sanitize inputs and prevent things like SQL injection). If you were building a site from scratch you'd have other things to worry about, like password handling and secure credit card processing but since you already have a site I don't think you'll need to deal with those more sensitive areas at first. If you'd like to a have a professional spend a few hours reviewing your code before it goes live that's a service I can offer you. My website is in my HN profile and contact info is available there. Feel free to email me if you're interested.
- gotrecruit 13y agoyes, i do believe that i'm not an absolute and complete beginner, but if there is a theoretical 100% expert on programming, i'd say i'm maybe a 5% at most. i've taken classes in college related to programming but not ACTUALLY programming (for instance, excel VBA programming, and another freshman programming class which did not actually teach in-depth programming but introduced me to the basic principles) and i've also done codecademy and in fact finished all the php and python classes but i have no idea how to actually translate the stuff i learned into actually writing something useful. for instance, my e-commerce site is based on joomla and i tried to read tutorials on how to develop for joomla and i got absolutely nowhere. i don't know which IDE to use, i want to implement a daily deals feature on my site but i have no idea where to start, etc. when i say "production ready" code, what i meant was i want to be able to confidently list on my resume that i can write code that can be shipped, and to be able to actually legitimately apply for developer jobs. right now, the best i can do is finish codecademy exercises, which is not good enough. thank you so much for your offer, and i might just take you up on it! you guys are so generous and nice here, frankly i'm quite touched and inspired to start right now.
- leondutoit 13y agoWhen you encounter something you do not understand do not stop asking questions until you understand it - ever. No matter how small the detail or seemingly embarrassing.
- shubb 13y agoI'm going to give different advice. You should ideally try to get work at a software focussed SME, where you can learn from good developers, and slowly grow into larger and more difficult projects. There are lots of different small software companies serving different markets. HackerNews and SV seem to be full of consumer targeted ones, because of the potential for rapid growth. But a lot of SMEs do B2B or government work, and you may find that because they are less cool, it is easier to get them to take you on. They are also more likely more focused on making good software and actual money, than building perception of growth to get a good exit for the founders. At least round where I live, you can find these small companies in office parks and industrial estates. Find one that is doing something you think is cool, and vagually chimes with your portfolio. Then write them, and ask if you can do some kind of a placement with them. Try to talk to the engineering management, as HR just get in the way. Once you are there, and get on with the people, it should be pretty easy to get a junior role out of them at the end. If you are up front that you want this at the start, a lot of them will treat you more seriusly. Think about what you can offer them - they will have projects, ranging from adding unit tests to writing a better time sheet system, that they would do if they only had time / free resources. Get them to talk about those things, and then sell them that you want to give it a go. Other commenters - do you have any suggestions for a better way to make the initial contact?
- gotrecruit 13y agoto be honest, i actually did think about what you said (before you said it) - i wanted to apply for internships or even full-time jobs at the local office in my country for LinkedIn, and offer to work for them for free in exchange for being able to shadow an experienced developer and learn from him/her. however, i can't imagine being able to offer them anything in return to the point where they would agree to such an offer. all my friends tell me i should be paid for learning, so apply for jobs and learn on the job but again, i don't know how i can market myself to the employer where he/she feels like it's a win-win rather than simply them investing resources into training me and then me leaving after i learn them. but i will go ahead and contact some of these companies' engineering departments, i think it might be a good idea. do you have any suggestion as to how i should approach them?
- dschiptsov 13y agoI would suggest a "long road" - forget for a while all this PHP stuff and invest some time "to know any better" and learn some theory to better understand hows and whys that will arise in daily practice. I suggest to take CS61A by prof. Brian Harvey (it is available on YouTube) and then with understanding of why something is better than other, take a look at Scala and Clojure as appropriate tools to get shit done. PHP is a dead end, and websites could be built with Scala or Clojure too. I wouldn't recommend Haskell before understanding deeply CS61A and SICP. HtDP2 and related course on Coursera is another decent start, but the path described above should be taken afterwards.
- talmir 13y agoI started programming in the old, dark days of pre-internet when the only ways to learn programming for a young lad was to either find a book on the subject (In Iceland the books were pretty rare at the time), find a older more experienced person to teach me or just hack at it myself. I went with the last option. I spent many hours staring at the DOS based Pascal IDE and in-built help documents. I managed to create a few programs on that which laid the foundation for when I got into C++. After a few years of learning on my own I found that I could not find a job working on code until I got my education which caused me to go get a university education at the age of 26. Now I have a couple of years of development experience both using C++, Python, Javascript and a myriad of other supporting languages. Today, all you need to do to learn to code is to code. You have the wealth of the internet at your fingertips. Choose a language, find a project and code. Create games if you have no ideas. Clone existing games (Like Tetris, Simcity or somesuch). In this industry the old adage "Mileage matters" applies. Eventually, before you know it, you will be churning out production ready software. I know I cant pinpoint the exact method I used to get there. All I can tell is that somewhere along the way, through millions of keypresses in multiple programming languages, I picked up the right habits. You can do it to :) Just go build stuff! (Oh and regarding the operating system question. The OS does not matter at all. You can code in all of them. I started out in windows. Currently using linux for my dev work. Its just a matter of preference)
- aestra 13y agoI can't stress this enough but if you're going to deploy a web application you need to be serious about and learn about web security. https://www.owasp.org https://www.owasp.org is a good place to start. Windows is just fine, it's a personal preference. I learned (mostly) on Linux but I use Windows at work, whatever.
- veganarchocap 13y agoI wrote a blog on this fairly recently, it's helped a few of my friends, so maybe it has some info you could benefit from, too :) http://www.ewanvalentine.co.uk/coding-your-own-career/ http://www.ewanvalentine.co.uk/coding-your-own-career/
- n_coats 13y agoI'm in the process of throwing together a short and sweet e-book (20 pages) with basic front end concepts explained from a zero background perspective and references to more places you can go to further develop your skills. It's $10, shoot me an email if you'd be interested in a copy or have any questions! Good luck on your journey as well!
- alanctgardner2 13y agoTo me, $.50 a page for a list of links to other resources seems like selling shovels to people trying to get in on the coding "goldrush". That said, I'd be into doing a review for my blog if you care to send a copy.
- n_coats 13y agoIt's more than links to other resources. Having transitioned from a marketing/business background to a development career, I recall the areas that gave me the most trouble when I first started and would like to simplify that for others who would like to become more familiar with development. I'll send over a copy as well, I'd be curious to get your opinion!
- henrik_w 13y agoRegarding production software: I gave a talk to university students on the difference between professional software development and programming for a university course, and wrote about it in "Working as a Software Developer"[1]. I also included ways to cope with the problems of SW development, and how to become a better programmer. Maybe something in there can be useful. [1]: http://henrikwarne.com/2012/12/12/working-as-a-software-developer/ http://henrikwarne.com/2012/12/12/working-as-a-software-deve...
- didyousaymeow 13y agoThe biggest hurdles I think most people face is maintaining momentum throughout their educational process. Most people want to start something new and quickly fall back into their old patterns that didn't include this new thing. You have to make time in your life so this becomes a consistent and ever present part of it. So, my advise to you is to study for some period of time every single day, even if it is a 1/2 hour. Make it a habit. Start with reading a intro level book and make sure that you get through it. Even when you don't understand what you just read. Just finish the book. Read it every day. Parts of it will be easy to understand and it will start to sink in. Then, do more.
- MervGriffin 13y agoLearn how to type using proper English syntax first. Once you have basic sentence structure down, you can move on to programming.
- mcv 13y agoEnglish is not a strict requirement for programming; lots of people in countries where English is not so common, still manage to program perfectly fine. English does help to engage with the international community (where English is the Lingua Franca), though.
- gotrecruit 13y agoerm.. what? i'm not sure what you're implying, but English is my first language...
- squigs25 13y agoIf it makes you feel better, I found his comment as strange as [i'm guessing] you found it
- gotrecruit 13y agoyes it kinda sounded pretty condescending, i wasn't sure if i misinterpreted what he said or if i sounded like English wasn't my native language.
- RankingMember 13y agoAs I think someone else mentioned, hit up http://www.codecademy.com/ http://www.codecademy.com/ and you'll be on your way. The only thing standing in your way is distractions, so start consuming your stimulant of choice, go to a quiet room, and get learning.
- elwell 13y agoOP said: "i've done codecademy and similar stuff before"
- RankingMember 13y agoWhoops
- pjmorris 13y agoPeter Norvig wrote an essay that you might find useful, "Teach Yourself Programming in Ten Years." [1] Don't be put off by the timespan, apply what you find useful. One tip, clipped from the article, itself clipped from somewhere else: ""the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors." I've found volunteering a useful way to enter a professional environment where I'm not yet comfortable being paid for my output. Find people doing what you want to do, and offer to help. [1] http://norvig.com/21-days.html http://norvig.com/21-days.html
- elwell 13y agoYou're on the right track; just jump right in. I would suggest focusing on one scripting language to start though. Python or PHP would be fine choices. I learned on PHP and still use it. If I was starting now, I probably would have gone with Python, but you're fine either way. Facebook is built on PHP. Google uses Python a fair bit. There's nothing wrong with learning programming on a Windows machine! People who are avoiding doing real work quibble about these things. Especially for web development, it doesn't matter. (If you want to get into native iOS dev, you should get a mac) Choose a simple project and learn as you go. Some ideas: a todo app that connects with a database, a journaling app that writes to text files and let's you do simple edits, something else you're interested in.
- mcv 13y agoWindows is bad for programming only if you're familiar with Unix. A Unix shell can be an extremely powerful tool in the hands of someone who knows how to use it. These are the people who bitch about Windows. OSX and Linux are both unixen, so these are popular with unix afficianados. But if you're not familiar with Unix, Windows is perfectly fine as a programming environment. And though I miss the unix shell, I'm currently working on Windows myself. I'm not thrilled about it, but it works.
- JackMorgan 13y agoRight now my current suggestion is read and complete the first two chapters of SICP. The book is free, the software is free, and you will learn an incredible amount for your efforts. After that, you'll have a foundation you can easily build a career on.
- phantom_oracle 13y agoI found someone else here that was also looking for real-world experience. If you need some, contact me. Our teams are almost at the stage of beginning to write the actual code, if you can catch up on the documentation and have your system ready (a VM with some Ubuntu-based distro and the correct dev tools) you can join us. Also, you can develop on Windows. It isn't that bad. A lot of companies are looking for .NET devs (which I think only runs on Win) so it is fine to use it.
- gotrecruit 13y agohey can you tell me more about this? i'm definitely interested, but i don't know if i can catch up on time (although i'm willing to put in the effort to try!) to be able to contribute to your project.
- phantom_oracle 13y agoHave you completed the Ruby/PHP/Python track on codecademy? You say that you are beginner, which is fine, but you should at least have done 1 of those 3 courses already. Also, what is your email? You can use boun.cr to not expose your real email address out here.
- gotrecruit 13y agoHi, yes a few months ago i finished all the PHP and Python classes available but I think they have new ones now that I haven't completed (which I intend to). thanks for the link to boun.cr, it's a pretty cool site! i just used it and my email is gotrecruit@boun.cr. please let me know more about your project!