4 ms·
I highly suggest going the technical route. Ask yourself this: would you prefer to be a software developer in a start-up (including your own), or a manager in a
by strlen 16y ago
I highly suggest going the technical route. Ask yourself this: would you prefer to be a software developer in a start-up (including your own), or a manager in a more established firm? If the only sort of management you see yourself doing is in your own company, I don't see an MBA as being very useful to you. You need to be some self-sufficient, meaning you should know how to code and not just how to manage. It's easier to bring in outside managerial talent to a purely technical firm rather than vice versa (I personally would never be the first programmer in someone else's company, many other hackers are similar).
You already have a strong background in a quantitative discipline (CEng). It means you'll have an easy time picking up either. Don't forget the advantage that this gives you. That means you'll have an easier time with statistics, mathematics and numerical analysis: this opens up a whole new world for you that's closed to many programmers who are only good at programming.
That being said, there's a lot you still have to learn. Start with learning C (you might not develop your application it, but a) you need to understand how physical memory works in order to be a programmer b) C is the lingua franca of programming languages which means you'll have no problems learning whatever other language is better for the task at hand), then learn algorithms and data structures and at least three of (compilers, operating systems, databases, computer networking). Then specialize: machine learning/NLP/IR (given your "real engineering" background, you might have an easier time here than most programmers), further into systems, further into databases, etc...
That's a multi-year project and you have to be ready for it.
Don't under-estimate the value of experience (by experience I mean working in firms whose product is software i.e., not consulting or internal IT development) in doing a start-up: it's possible to start without "having done it before", but several years of work experience (alongside people much smarter and more experienced than you) is extremely useful. Experienced developers have a huge role to play in a start-up: partly by making it possible for apt junior developers to be recruited (they want to work alongside "hard core" hackers) and mentored.
If you join a start-up, it's also a chance to be exposed to the "business side" as well -- although certain types of established firms (in my experience, those who build software for other developers) will give you exposure to customers and sales/support cycle as a developer too.
If you prefer a more structured environment in which to learn (as do I -- there is absolutely nothing wrong with that), an MSCS will serve you well. It's also a chance to meet hackers, show your "worth" to them (they'll have collaborated on lab projects with you) and make connections without looking like a "shmoozer". It will also give you credentials for employment (getting initial experience), although I'd have zero hesitation in hiring a self-taught hacker with a degree in Civil Eng (software development is really an engineering discipline rather than a science).
- hga 16y ago"I personally would never be the first programmer in someone else's company, many other hackers are similar." Including myself; the one time I inadvertently violated that it ended in tears (the idiot penny pinching salesman who was the founder tried to put off really hiring the first programmer until he got at least 1 other programmer ... and the first got a better offer; I think the only benefit I got out of that was by the end of it I could port code between subtly different versions of UNIX in my sleep (1H83)). In that case, it turned out to be impossible to hire the 2nd programmer and the start-up never started up. As for your sequencing recommendation, I think it's better to learn foundational CS with something like SICP/6.001 and then reifying it with C (this CMU course looks damned good: http://www.cs.cmu.edu/~213/index.html http://www.cs.cmu.edu/~213/index.html). I think it's easier to make your mental tool box bigger if you can do it this way.
- strlen 16y ago> As for your sequencing recommendation, I think it's better to learn foundational CS with something like SICP/6.001 and then reifying it with C (this CMU course looks damned good: http://www.cs.cmu.edu/~213/index.html http://www.cs.cmu.edu/~213/index.html). I think it's easier to make your mental tool box bigger if you can do it this way. Thanks for pointing out SICP/learning a non-imperative language. It's very important to learn a functional programming language and Scheme is the best choice because a) it's the language SICP (one of the best computer science books) uses b) it's "pure-enough" (you still have set! if you need it, but tail call elimination is a part of the language specification) as a functional language and doesn't introduce too many other (important, but unrelated) ideas (unlike Haskell or ML which have strict typing and unlike Scala or F# which have OO). I would, however, disagree with you that it should be the first language: it should be taught before "blub damage" takes place (e.g., before students think only in terms of OO) but it's good to be familiar with programming and data structure to some extent (it helps to understand cons cells as pairs of pointers). C is a great language to precede Scheme: it doesn't force the OO paradigm and teaches students to differentiate between the value of the object and the address of the object (thinking in terms of multiple levels of indirection). The reason I argue against teaching SICP to complete newbies is because otherwise students tend to think of functional programming as some sort of an academic exercise and not as an approach to solve the problem. I am basing this on actual observations of students that I know at UC Berkeley and at my own school (where a Haskell based course served the same role). Unfortunately in general I find that students don't appreciate the value they get out of a non-"Blub school" ("why am I messing with pointers and recursion instead of writing GUI apps") until much later in their career ("oh, I know how to reduce the state to take advantage of all the cores!"). (1) I use "Blub school" rather than Spolsky's "Java school", as teaching C#, Python or Ruby as sole languages would have the same effect (it's trivial to learn all of these languages once you already know C and Scheme, it's an uphill battle do the reverse).