Need Experienced Input Here

Discussion in 'Automated Trading' started by circadian, May 13, 2009.

  1. I'm finishing up my last year of B-school, and have become well aware that I need some advanced computer skills beyond the hum-drum stuff that I've done in school thus far. My degree plan is such that I don't have the schedule to fit in a minor in computer science.

    My question is this: What types of computer education programs (non college) could I pursue outside of school, say in the summer?

    I'm quite proficient in excel (but not so much VBA), quasi proficient in Access. My SQL skills are mediocre. My html skills aren't bad, but litmited. No C, C++ skills at all.

    Also, is there a basic hierarchy of skills, or an order that I need to learn them a natural progression? Ex: VBA first, then SQL, then on to C++??

    My goal is to have some proficiency (and maybe some certs in) programming by the time I graduate for the sake of competitiveness and the sake of having these valuable skills. Any input will be greatly appreciated.
  2. Well, some givens:

    * Most people do not grab SQL ;) SQL is set theory, many people have problems with that and never grow above "low level" SQL. That said, this is good enough for most applications. Those not believing should read some of Joe Celko's books about SQL riddles ;)

    * There is no natural language progression in programming. You should first and foremost learn PROGRAMMING. This is asking like whether there is a language progression for a book writer. YOu are epxected to know the langauge you work in, but first and foremost a programmer is someone knowing programming. Standard setups are identical everywhere, principles syntax semantics change. Yes, some languages are a lot better in certain things than others, but unless you know the principles, you basically are stuck on the "I only know how to work with a hammer" problem.

    Learn some proper languages and proper systems. Most of what you listed basically does not say "programmer" but "limited knowledge". You do not even list VB (the "real deal") but VBA (which is the version to run in an application - it is really simplified in what it can do, and what one is supposed to do with it).

    If you want to get into programmiing, I would suggest getting onto the list:
    * Either C or Assembler (better) for some primitive low level thing. The idea is not to use it, but to learn how a computer works. Abstractions are nice, but - seriously - too many programmers today are ignorant towards how the computer really works.
    * Some higher level OO langauge. I would personally suggest C#, but Java is also OK. Stay away from C++ from this level - that langauge is extremely hard to master, and misses automated memory management. Get the OO principles first. I personally prefer C# because it has some really nice lanaguage level features (LINQ) that are pretty unique.
    * Add a functional language to see a totally different concept. Microsoft's AXUM research langauge may also be interesting for highly parallel computing. You will not use those too often (functional programming is rarely used in projects, AXUM is purely research), but the concepts will challenge your thinking ;)

    On the database side, if that interests you, read up on SQL (not learn SQL, read Codds Relational Theorem to start with), and then do some excursion into OO databases. Again, the idea is to understand advantages and disadvantages.

    This will take time, obviously. OTOH it will ensure you know what you talk about, which sadly is not even the case for many high paid consultants.

    But befoer all that, decide what you want to do. Sounds funny, but "programming" is similar to "working". There are many areas with very different requirements. What interests you? This determines the language selection and technologies you may use later. Example: I totally missed higher math here. Try doing 3d programming (games etc.) and you will need baiscally a lot of that. Do typical business programming, and you will never see a matrix. Web portals - better get used to Javascript. Server programming or database specialist - 99% chance you will not write a line of Javascript.
  3. You might consider some introductory computer programming online college type courses.

    You might search for a free c#, c++ or F# compiler and just start writing little programs and learning. I notice programming tutorials are available on internet.
  4. 1. Get a cheap PC

    2. Install Ubuntu

    3. Install Java and Netbeans

    And begin with some of the SUN tutorial material referenced on the above page. Find a decent book on OO programming.

    If you use Linux you have a much better chance of learning something about operating systems.

    Once you get started, there are a gazillion open source applications in Java that you can have a look at to see how non-trivial things are done. Several OSS trading applications in Java are available.

    Do not start with VBA or SQL. Learn programming principles first.
  5. None of those, though, teaches one to PROGRAM.

    Programming is more than the syntax, and if anyone has ever seen a so called junior programmer staring at the screen trying to figure our how the hell to program something pretty simple because he never learned to create an algorythm or organize his ideas into a flow diagram will realize that.

    Programming is a lot more. Syntactical knowledge about langaugesis useless without a sound fundament of how to attack problems.

    And Linux vs. Windows is totally useless in this context, too. Yes, Linux has the code. Trying to program by reading kernel code, though, is - not productive. On the other hand, Linux based development environments generally are sub-par. As is, sadly, documentation.
  6. I am not going to argue about the merits of various IDEs, or even the claim about documentation (though a quick 'du' on /usr/share/doc did show over 300 Mbytes installed on a pretty standard Ubuntu box, not to mention a couple of hundred MB of Java Doc), but I will assert a fundamental virtue of Linux.

    And that is a difference in philosophy. It is open - there are no secrets - and nobody has any imperative to keep secrets. And that is why it is the best platform (along with friends such as BSD and Open Solaris) for learning about operating systems. Not just the kernel but the whole box and dice. Windows just does not compete in this respect.
  7. dozu888


    don't miss the big picture.... when you can hire a coder for $10/hour on, why bother.

    Learn how to trade FIRST !
  8. With all respect, but who cares whether it is OPEN? This is not even a topic abou designing an operating system.

    Stating in this thread that Linux is better because it is open is like stating that one needs to study aviation engineering before making a pilot license - senseless.

    Especially when you talk about something as Linux. If you would talk about an open source trading framework, ok, but studying an operating system is so out of bounds it is not even funny. Note how Linux did actually start as programming exercise in one of the most boring things ever (for a normal non-IT-studying person), which is programming a kernel.

    Plus, if you think 300mb documentation are good, this is for all of Ubuntu... Compare that with MSDN, and you may realize at one point it is pretty pathetic. my (agreed, third party) user interface library for C# has half of that as documentation. And that is ONLY for a user interface library. And personally I always foudn the Java documentation more a pain to use than anything else - especially compared to to Visual Studio.

    But other post is better, but I am not sure the OP even asks about programming for trading ;) Could be, could not be.

    I personally took a community college course in Java & thought it was useful, although it moved too slow & I got bored quickly. In doing this I learned several things:

    1) I don't really like doing low-level development. I would rather focus on model/system development & hire out the 'plumbing' work to someone that is into that kind of work.

    2) I like using Matlab (or some project with lots of functions already developed). I don't like re-doing things that others have already done and I can use.

    3) I learned that my time is better spent on higher level tasks & finding some people to handle the lower level ones or buying software that already does this.

    I will likely continue down the path with the community college route to learn more, but I don't intend on getting further along than 'proficient'.

  10. dholliday


    I was a VC++ programmer for many years (since VC++ Ver. 1) before becoming a Java programmer. I am not going to argue anything, this is opinion, I respect yours.

    If you decide you want to learn C# or Java, some things to consider:

    Microsoft dominates the desktop and small business market.
    C# copied and in some ways improved upon Java
    Visual Studio is great
    Microsoft builds most everything you need so there is little choice, but fewer choices simplifies your choice.
    Microsoft dominates (compared to Java) the consumer stock charting/trading application market.
    Do you use a Windows PC? Do you love Microsoft products?

    Java dominates in large corporations, the server side (web development) and mobile phones
    NetBeans and Eclipse are great and free
    Java is open source
    There are a huge number of open source libraries to do most anything
    Java really is cross platform
    There is a huge community of Java developers
    Java dominates the corporate trading/analysis application market.
    Do you use a Mac or Linux PC? Do you hate Microsoft?

    Compared to C/C++ Java (and I assume C#)
    Java is slower to start up
    Java usually takes more memory
    When running, Java is slightly faster in some cases and slightly slower in other cases
    If you are going to do low level programming, use C

    When I programmed in VC++ nothing was free or open source. In Java everything I have ever used was free and open source.

    If you decide you want to become a programmer, figure out what you see yourself doing and take a course in one. Otherwise your time may be better spent somewhere else.
    Good luck.
    #10     May 14, 2009