I am in my early twenties and am seriously considering a career in entrepreneurship. I have a partner and we are in the midst of entering our business idea into numerous entrepreneurship contests. We have met with several business and tech professors and have been thoroughly encouraged to pursue this. The only problem? Neither of us know any code. One of our business coaches, a successful entrepreneur himself, suggested that the programming can be done with little problems -that there is still much utility in two idea boys. However, to be truly successful, it has occurred to me that we will need to know the ins and outs of programming. Perhaps we won't need to be experts, but a successful leader must be well versed in every aspect of his company. Does everyone agree? Can anyone make some recommendations about where I should get started learning code and the strategies to keep in mind while doing so? Help is much appreciated.
You could probably get away with not knowing how to code, but even an elementary understanding helps you to know what is and isn't possible. Spend a week or two getting the fundamentals of programming (even if you won't be able to program very well at the end of that time), and you'll be in a much better place.
True, my mistake ... I've done a python class at school and consider myself a beginner, so I never noticed the split. What book would you recommend instead?
If you're starting from the very beginning, learn a good text editor. (Editing is such a huge part of programming and has so many other payoffs that it is a very good first step.)
Use a forgiving and simple language like Python, and ideally an operating system where the tools you need are already installed.
Learn the documentation systems for your language of choice. For instance, in Python, you can go to http://www.python.org, run the command-line "pydoc" tool, and use the "help" function in an interactive session.
Use things like StackOverflow and Google (i.e. learn how to find answers and ask questions). These days, help isn't too far away.
Choose some programming goal, even that goal is something arbitrary like reading 20 lines of a text file and printing all the words that start with A. Make yourself write programs that achieve arbitrary goals so that you're satisfied with how well you're learning the language. Do this for a few weeks before you attempt anything remotely related to the "real" reason you learned programming.
Also, get a mentor, and some like minded people to share code reviews with.
And not only write code, but also read code.
And debugging is actually a more useful skill than writing new code, and comes in handy far more often. It also tends to be more painful. But where there's mud, there's brass.
On top of that find some local user groups that use your language of choice, they are normally very welcoming of new programmers. If you are friendly and want to learn, you will surely find some people willing to give you advice and point you in the right direction.
I wonder if my site can help you. It is intended as a online tutor designed for programmers preparing for job interviews but I think you'd find the find the practice problems, in-depth tutorials and the video lectures (coming soon) helpful once you get a bit of programming experience.
If you happen to try it out, I can answer any programming questions you may have, give you tips, feedback, etc.
A friend of mine is in the same boat. I forwarded him all the usual suspects, from "Why's Poignant Guide to Ruby", to "Learn Python the Hard Way", to "The Schemer's Guide". But none quite worked for him. He finally found and settled on Harvard's intro CS course, CS50:
This is the route that I went... it starts at the beginning a teaches a lot of simple principles of programming. David Malan is engaging & fun to learn from, you can even follow along in real time (during fall & spring & interact with other people taking the classes remotely). I followed up with www.cs75.tv to learn some additional PHP, SQL, XML, CSS. I've been a marketing/product/seo/pr guy for 8 years and taking these courses have provided me with a much deeper understanding and appreciation of what the limitations and capabilities are. This has been invaluable when working with talented programmers who at least appreciate that I'm interested enough in what they're doing to learn the basics myself... sort of a mutual respect thing.
I'm in the same boat as the person that posted the original message but I'm currently doing Rails for Zombies (free in-browser interactive course) after first doing tryruby.org (free interactive introduction).
thank you so much!! I was in the same boat just trying to plow through books, having the basic concepts down first after working through this class should help a ton! :)
Build something that you want to use so it will be meaningful to you. Do you have a blog? That's usually a good first exercise. It's easy to do using Flask -- follow the tutorial (http://flask.pocoo.org/docs/).
Here are some tips to get you started:
Use Emacs as the text editor to write your code -- it usually comes pre-installed on Ubuntu, and it has a Python mode. Here are some Emacs tutorials (there are some good videos on YouTube too):
When you build a blog, you don't have to worry about building a public authentication and comment system if you use something like Disqus (http://disqus.com/) -- you just include the Disqus JavaScript tag at the bottom of the blog's entry page.
Mmmm, unnecessary flame bait. You could have instead, said, "I like and am productive in VIM too, check out this tutorial". I think we all know, at this point, that you can be immensely productive in either Emacs or VIM.
/me bias because I'm an Emacs user - but I don't think myself above VIM users...
I agree with the generalities of the response but disagree with some of the particulars. Learning programming should be language agnostic. The "best" language is the one that works for you. Everyone is different and every language is different, some work for some but not others. I'm primarily a Perl person, not that Python is bad, but it's not my language of choice. I advise experimenting with different languages and finding the one that best suits your mindset and needs. For me, Perl is the one that "clicked" with me. I like using it and am productive in it. I've experimented with many other languages (Python included), but Perl just fit me the best. I see the power of other languages and am constantly impressed by what I see others doing in different languages, but ultimately the "best" language is the one that works for you. Even when it comes down to development tools, I'm a vi person. Emacs has it's benefits, but I prefer vi. Pick what works for you. For web development the LAMP stack (Linux, Apache, MySQL, PHP) is arguably the most popular. Most of the open-source CMS platforms such as Drupal and Joomla use it. Facebook is built in PHP on Apache and Linux. I respect PHP as a web programming language, it's accessible, has many of the conveniences of Perl (without many of the idiosyncrasies) and is web-centric. There's a reason it's popular on the web. Experiment and pick what seems to work best for you. There's no single solution. As we say in the Perl world, TMTOWTDI, There's More Than One Way To do It.
> I advise experimenting with different languages and finding the one that best suits your mindset and needs.
The problem is, someone who is just starting doesn't even know what to look for. They don't know their mindset or needs, yet.
The OP advice should be taken as "these are good defaults, when you grow older you'll be able to tell what to change and, more importantly, why to change".
But at the same token, just saying "use this language" presents the same problem. What if Python doesn't work for the OP but picks it because he/she was "told" too. Maybe the OP is a math-centric person and would excel at a functional language, but didn't know anything about them because they were never informed. I think the better answer would be to recommend a few languages and let the OP decide what works for them. There's plenty of good information about all the major languages on the web, including tutorials. After you go through a few tutorials you'll know if that language works for you or not.
Print out espeed's answer. Put copies on your desk, tape them to your refrigerator, tape them over your bed. Put laminated minature copies in your wallet.
I started learning this stuff... my god... 10 years ago.
It took me over a year to figure out that line 1 was the best first step OS (a question I didn't even ask until 4 years in).
It took me four years after that to figure out that line 2 was the best second step (I am on chapter 18 of Mark Lutz's Learning Python, very easy read, the only problem is to not get impatient).
It took 3 years to figure out that line 7 (including line 8) was the best way to go for databases.
10 years ago was the first time I read Greenspun's stuff and decided to march down this path (lines 6 and 10). I still use vim as my primary editor, but I'm learning emacs. Most valuable starter tip on emacs I ever got: you should have hundreds of files open.
I think you're overreacting. It's hard to me to imagine that you were somehow slowed in your learning progress by using Windows instead of Ubuntu, MySQL or SQLite instead of Postgres and Vim instead of Emacs.
This is because the first and foremost important thing about learning to program is the desire to do so. The early hackers programmed by directly banging hexadecimal machine code into computers without screens. Were they not programmers? Sure they were. Don't put too much stress on the tools - just program.
I have another, unrelated, career (military physician) and I'm married, with two kids. So I'm doing this on scant marginal time, and the knowledge gained one day decays quickly unless I can get back in there and cement it the next day. A more efficient path would have been very valuable.
Use gedit as your text editor. It's the default GUI text editor in the Ubuntu operating system, and works well enough for programming, and is significantly easier than Emacs for someone just starting out programming.
I'd also suggest MySQL instead of PostgreSQL, for the same reasons (works well enough, significantly easier for beginners).
Postgres is no harder than MySQL, except maybe to set up; plus, postgres wont bite you in the ass down the road due to the plethora of reasons that make MySQL a pretty lame solution these days.
On the other hand, MBA types will have heard of MySQL -- that might be an advantage, of a sort.
I agree 100% about Ubuntu, Python and PostgreSQL. They're an excellent tool set. You'll want to learn how to configure PostgreSQL. Go to the project website. The manuals are quite good.
Agree with most of this. Python is an excellent language to start with. I would suggest downloading and using Web2py. It provides a complete environment for Windows, Mac and *nix. You can be programming a web site in literally minutes. Web2py can run entirely off your PC (with Rocket and SQLite) but then you can easily deploy to a server (nginx, apache, etc; Mysql, Postgres, etc). The Web2py Book is terrific and includes a very brief summary of Python: http://web2py.com/book
Setting up Linux teaches system administration skills. Useful, but nothing to do with programming. Learning Emacs is fantastic (I'm a huge fan), but again — nothing to do with programming. For that matter, writing a blog engine should not be someone's first exposure to programming. Frameworks and web development should be simply banned for people who haven't yet written a Fibonacci sequence generator. Please don't waste your time learning how to integrate other people's services and APIs. You aren't ready for this yet.
Don't think about tools, think about concepts. Learn about how programs flow. Learn about data structures, the basics of algorithms, and recursion. Understand how and why programs are structured the way they are. This stuff isn't hard, and won't take more than a few weeks to learn. Then you should look around at tools and at the kinds of problems you want to solve. In the meanwhile, you'll only slow yourself down if you try to run (e.g., figure out why web frameworks work the way they work) before you can walk (e.g., understand functions).
Following what other people said.. Python is a great (and powerful) language to get started with. It is what we teach our CS110 class at my University. Honestly, get a Mac or, like espeed said, install linux. Learning bash is invaluable. Also, learn HTML5/CSS. Every business needs a website, and with as powerful as HTM5 is, you could get up a decent one with just those two things (though javascript would be handy).
There are a ton of good resources online. Hacker News is awesome, Stack Overflow, etc. Python has a nice and free online book to get you started.
Best of luck!
Oh, I agree with the need for a good editor. Emacs is great (of course others will argue for VIM of course ;). Unless things have changed in the last release, you'll have to install it yourself which is one of the reasons people choose the lighter weight editor of VIM.
If you have a mac, I would suggest TextMate. I recently came across SublimeText 2 which is currently in alpha stages but is really cool too! It is cross platform so it will also work on Linux.
Either take a class, or do it like most self-taught programmers: Find a need and start looking up how to make it happen. It's going to be VERY painful at first if you teach yourself, but if you stick with it, you'll get there.
When i think about it - one language wont do it.
When you learn html/CSS - you will know how browser renders elements on the page, nothing else.
If you learn javascript - you wont know anything about server side.
If you learn PHP - it will complement your knowledge of html/css nicely, but you still need to know some javascript.
So my vote goes to PHP + javascript (+node.js) + HTML + CSS
edit: i recommend Ubuntu for development, or if you own a Mac, just install xampp and enjoy.
There are numerous online resources most of them have been mentioned here. I agree Python seems like a great way to start, its what I've been working through as well. I'd also suggest to see if there are local classes available in addition to the online stuff. Sometimes paying for a course at a college can get expensive but if you are in a area which is start up friendly and has incubators etc., you can get some cheaper courses there, to supplement your other learning. For example, in my area (NYC) there is General Assembly.
Remember though - entrepreneurship is not a career. You have to have a solid idea that you can develop into a product - developing and then taking that product mainstream and running that particular business (or working on selling it)is then your career.
Just like non-profit work is not a career - usually people who go into a non-profit work environment have a passion for something in particular, that then becomes their career, which so happens to be for a non-profit entity.
Python, as mentioned, is an excellent choice for a first language.
However, if you are either mathematically minded or somewhat into chain-and-bondage, then Haskell might also be worth looking into. I'd suggest reading Raymond Smullyan's "To Mock a Mockingbird" if you want to go down that road.
It's a popular book about combinatory logic. The kind of logic you need for functional programming.
First off, keep things simple. Don't dive into Linux, Emacs/VIM, etc. right away if you don't already know them. Your goal is to learn programming.
Next, you probably have an idea about where you want to be with your business. Is it mobile? Is it web? I'll assume the latter, because even if it's the former, you're going to need both eventually.
Even though it's not programming, you need to know HTML/CSS. Start there, even though it's not programming. You can get your feet wet editing and you can add programming shortly.
Start with a simple but capable editor. If you're on Windows, start with Komodo Edit or Notepad++. On Mac, something like TextMate. You can always 'upgrade' to Emacs/VIM later.
Once you're comfortable with basic HTML, you'll probably want to make it do things. You can start with JavaScript. This makes programming exercises simple and quick. Just refresh the page.
Once you decide you need a bigger challenge, then a larger world of choices becomes available: what server side language (Python and C# are two options), what server (Linux is pretty standard), what web server (Apache or Nginx are good), what database (Postgres, MySQL, MongoDB, etc...) are some of the many choices to be made.
I would first survey the above and decide what you think you might need, then pick the language based on that. Let's say you pick Python. Start playing with it from the command line or with your editor like you did with HTML. Once you understand the basics, then pick a web framework (like Django) and start making it produce the HTML that you now understand.
It's a stepwise process. The goal is to pick off small, achievable pieces, and then use them to build something more substantial. The core of it all, though, is programming. Programming is how you make the gears turn the way you want them to. Eventually, everything will start making sense and you'll just add to your repertoire as the needs arise.
Solve a specific real-world problem you have by writing a program to do it. Start with Python or Ruby. Start on one platform (Windows, Mac, Linux). Start small and get bigger by solving bigger problems as you progress.
Then, write a program that works on all major platforms with little or no modifications. Learn C++ or C. Learn how to use a debugger, how to distribute code to end-users, etc. While doing this, learn data structures, big O notation and why they are important when you need to scale. Learn how to handle threaded data safely and Unicode input too.
Just start coding ASAP to solve "real-world" problems (not book exercises), the rest will come as you progress.
+1 for actually answering the "how to learn" question rather than the "what should I learn question".
To your comment "Solve a specific real-world problem" I would say +1, but add that you should start by trying to solve the smallest possible specific real-world problem that will create some sort of value for your customers.
And before you start, describe that problem using a testing tool like Cucumber (cukes.info). This will ensure that all your early coding and learning is completely focused on solving that one small problem.
Keeping reading, Googling and experimenting until you find you can write enough code to solve that small customer problem. Then set your sights on a slightly larger customer problem.
As for tools, I like and recommend Ruby on the Mac but there are a number of options that seem to have lots of community support and free tutorials, including Python and Perl, whether on the Mac or Linux.
As someone who started out last summer I can tell you what I did.
I am quite a lot older than you and I have a child, a company and a girlfriend to manage, so you can probably pick it up much faster than me. Basically I have been forced to take an hour here and an hour there, sometimes more.
I have worked on it a while now but http://www.blueskycouncil.com is my idea of a idea generation website. still lot's of little mistakes but again it was actually having a goal in mind that helped me know how far in the process I was.
So here is what I have done.
1. Sign up for Lynda.com
2. Watch php/mysql for beginners twice, just to get an understanding of the scope that I am about to venture into.
3. Start programming with an idea in mind.
4. Use IRC, StackOverflow and friends
That should take you plenty of the way.
I can also recommend reading books like Code Complete to get a sense of some of the programming issues and paradigms to think of.
The best way to learn programming conceptually is to read Structure and Interpretation of Computer Programs, by Abelson and Sussman. The book is available free on-line, along with video lectures.
It's such a great book and I basically agree with everything you said, but I feel I should add a little caveat.
SICP is truly a masterpiece, but it might not be the best book for someone just starting out who wants to do productive stuff like prototype web apps. Peter Norvig wrote in his review, "I agree that the book's odds of success are better if you read it after having some experience" and I think I agree too, although I'm biased since I only read it after getting a degree in CS. I don't know how I would have felt if I'd read it as a freshman.
Felleisen et al argue that SICP isn't the best intro in their "The Structure and Interpretation of the Computer Science Curriculum" and although I haven't read the whole thing, I think I agree that How to Design Programs might be a better first book. It's certainly easier going, and you couldn't ask for a better environment than DrRacket to get started. And it's also freely available online.
I would advise AGAINST diving into SICP until you are familiar with turning text into a program with at least loops, conditionals, and basic functions.
Have you had success with assigning it? Have you seen beginning students learn using it, or have they come back to and said "gosh, I am glad you told me about SICP two years ago, it put me down the right path?"
You might have higher caliber students than I have had (or am), but I have a hard enough time explaining how to use a text editor in one window and run a script in another. To get to actually doing something useful enough to keep them interested via SICP is, well, beyond even imagining.
I'm about to give it a shot, and I'll let you know how it goes. :) Joking aside, I think the first chapter of SICP is the most useful, straightforward, and gentle (yes, gentle!) introduction to programming in existence.
While it obviously sucks that your students can't figure out text editors and scripts, I hope to alleviate some of the pain by using Racket, its integrated editor, and the "Run" button on the toolbar.
If you wanted to write a blog post about SICP and beginning programming students, that would be great. I think after one has successfully programmed a moderate sized project (a text based game of life, for example, or a simple cgi+session+database app), SICP would be great... but not till then...
(But then I am the type who very early learned to avoid what the best professors thought was a good intro text and only trust my fellow students. Because once you see the field as a whole, you have VERY different taste in introductory texts, and more seem to prefer terse and comprehensive overviews which start from first principles, which are also the VERY WORST sort of introductory text possible.)
Hello Rocamboleh, what route you need to take to learn programming skills depends entirely on what kind of business you intend to start. Programming is a big field and has a lot of different technologies in it to pick from.
While espeed gave you good advice for how to setup your own server and all the tools needed for a Linux-based web application, this isn't necessarily the best route for you to go. If your software is intended to run in a big corporation, for example, then you should probably consider learning either the Microsoft technologies or the Java Enterprise technologies. If instead you're going to be working on iPhone/iPad or Android devices, then you will need a different tool set. There are a number of other alternatives you could pursue, as well. The answer really depends on what kind of startup software you need/want.
If I can help you further, please send me an email (address is in my profile) and I will be happy to try. Good luck with your endeavors.
Here's how I am doing it: Grab an open-source program (in a space that interests you), figure out how to get it running, then mess with it. Keep changing it and messing with it.
After time, you will begin to understand more, and gain confidence. Just keep at it. Don't stop pursuing your business interests, etc, but just code code code. Best of luck!
Don't start programming at all. I am going to be brutally honest, programming is not for everyone. The fact you stated you want to start programming and you're entrepreneur is a flag for 'someone who wants to learn to program in order to become some millionaire'. These sorts of people are not successful in the field. Worse, we have bad enough people in CS already don't poison the pool with even more people who bring nothing to the software table.
Reason for my downvote: that was nothing but obnoxious and uncalled for and fraught with untenable assumptions about the OP. you could have said "you may find you dont like programming after you give it an honest effort, in which case you might want to try something else".
The best resource I've seen is the Pragmatic Bookshelf Learn to Program, by Chris Pine. A good friend of mine who had no programming background whatsoever went through that book this August, enjoyed it and made great progress. It was enough that he found himself writing small scripts to help organize research at his pysch research job. The fact that he could occasionally save 15 minutes of work by spending 5 minutes to write a small chunk of code, kept it useful and kept him at it. The book uses Ruby, but what it really teaches is programming. My friend has since picked up quite a bit of Python and even a bit of JS with very little difficulty now that he understands functions, classes, iterators, blocks, etc...
In fact, what I saw impressed me so much that I've bought a copy to work through, even though I'm already writing basic flash games in AS3.
> One of our business coaches, a successful entrepreneur himself, suggested that the programming can be done with little problems
He's sort of a maroon. You can figure it out and be 'functionally illiterate' fairly quickly with some ingenuity and hard work. You'll produce some hardcore drek that will need to be cleaned up by a professional at some point though (maybe you after a few years of programming :)).
Python is the current fad language for introductory programming. I am not a huge fan, but there's lots of gentle reference material, which is probably more important.
Learning the basics would be a smart move. Just don't get a big head once you've learned a little, because the gap between "knows enough to be dangerous" and "truly competent" is vast.
The strategy is simple. Stay focused on practical problems at all times. Pick some real thing you would like to achieve, and bang away at it, learning as you go. When you get stuck, look for help on places like Stack Overflow.
Expect to suck at it, and expect to spend countless hours baffled by things you can't figure out. There's no skipping this process. Most people find it too painful, which is why most people never learn to program.
It doesn't really matter what projects you pick, so long as they're relevant to you. If they turn out to be "too difficult" you'll learn just as much, and be able to pick a smarter project next time.
I've found that I've learned the most about "programming" from working on projects. Imagine something you want to build, design it, and then code it. You'll learn tons, I promise. Plus, you'll have something to show for your trouble at the end of it (which is a great motivator to get you going on your next project). Rinse and repeat.
Start Learning JavaScript!
In one shot you will learn 3 things
1. Client Side Programming (Browsers)
2. Server Side Programming (NodeJS)
3. Database programming (Using JSON eg. MongoDB and CouchDB)
How to start?
1. Install NodeJS
2. Install Chrome Browser
Start palying.....
On the one hand, I would say don't bother. Just chop up the task into small bits and outsource them. There are programming equivalents of the logo design contests, you can get the programming done very cheaply, and there are business oriented non-programming guys having a lot of success doing this in the mobile app space at the moment.
On the other hand, I imagine you building the next big thing as a social webservice. You won't understand security, you won't know why it is important, you won't know why it is hard... this worries me. Even big supposedly tech savvy companies (Google being a prime example) get this wrong (when it comes to my data PRIVATE IS THE DEFAULT dammit, not public!!!)
On the gripping hand, you can treat programming like any other kind of artistic talent. You say you need to understand every aspect of the company... well, will you have art? Will you have splash screens and icons? Does that mean you will go to art school as well as learning to be a programmer? Maybe you need some sound, will you spend 10 years trying to become a concert pianist?
If you are using Windows:
1. Download Visual Studio Express Edition
2. Google for C# tutorials for beginners
3. Follow it.
If you are using Linux:
1. Google for Python tutorial for beginners
2. Follow it.
Learn some web programming by following tutorials on
w3schools. You should be able to create simple static web page and host
it on localhost.
Why C# and Python? Well both are widely used and are easy to grasp.
Once you grasp basic concepts like
1. if...else..
2. for
3. while
4. case
5. What are libraries?
7. What is difference between
compilation and interpretation?
8. What is the difference between editor, IDE and compiler?
the force will guide you.
And if at any point you get stuck you can always ask question at StackOverflow.com
Then, you can come back and "Ask HN" how do I become better programmer?
Does a Python version of core programming concepts like Algorithms, Abstractions, OS, etc exist? Basically all the major course of Computer Science which need a programming language to grasp the concepts.
Every University site I have seen has them in C++ or Java. I was so excited to do MIT 6.0 Intro course for Python and throughly dissapointed that other courses are in C or Java. Do I HAVE to learn 3 languages (even if it just skim through) to just get the basic concepts?
I know of books like Learn Python the hard way, Think like a Computer Scientist and like but I guess they do not cover the above topics. Please correct me if I am being ignorant here.