PDA

View Full Version : Help me decide upon a summer project!




HyperSnake
Jun 26, 2009, 06:42 PM
Hello everybody,

I'm a fourteen year old boy, who got into programming about eight months ago. I've always been fascinated by computers and technology and my new (selfpayed) iPhone made me take the step to start learning programming. Initially I started learning C++ through an introduction to programming book. However I only used it to get a basic understanding of programming along eth all the basics like pointers, functions, data types, syntax etc. After that I had to decide upon a platform I wanted to program for, and thereby learn it's language and framework. I chose the iPhone because of the App Store, which would allow me to distribute my software for everybody else to use. Additionally I also chose the iPhone because I knew it wasn't that different from Mac OS X, so by learning cocoa touch, I'd automatically learn a lot about mac OS X. I started out by reading Kochan's fabulous book: "Programming in Objective-C 2.0 second edition". I enjoyed it very much and it made me even more eager to get started writing some real software. After having read kochan's book in its entirety, I got Dave Mark and Jeff LaMarche's equally fabulous book: "iPhone development: exploring the SDK". I have to admit that I stopped reading when I got to the OpenGL part of the chapter about drawing since I figured the rest of the book would be lots of stuff that I probably wouldn't need for any application I was planning to make, and if I should need it, I could always just read that single chapter. OK, so after having "finished" the iPhone development book, I knew enough about programming, objective-C and cocoa touch to write an app right? NO! I was soon to realize that programming is not just initializing objects and calling methods, it's all about problem solving. It was at that time I found out what I want to do for the rest of my life. After much difficulty I build my first application, a Danish joke application. The graphics are awful(I had to make them myself!) and the code probably isn't the most efficient in the world, but I released it on the App Store(what a hassle!) for free and guess what! It made it to the number one free download in the Danish app store just in three days! Yes I was pretty excited and Im now currently writing my second app: a confidential data keeper(storing passwords, files, pictures etc. All protected by a password using 256 AES encryption). I've definatly gotten the hang of it all now and Im writing this app much faster than my first so it already almost finished. The entire summer lies ahead of me and I'm planning on spending it to learn something new in programming, the problem is, I don't know what I would benefit the most from. Here's a list of what I've thought about, but if you have another ideaS I'd love to hear them.

• OpenGL continued by OpenGL ES. I believe this might benefit me in my applcations as well as in the future since so many systems and devices use it to handle their drawing. Additionally, I love playing games so being able to make some myself really would be cool.

• Assembly. I've heard assembly is very difficult and almost unusable, but I've also heard that learning assembly is learning the computer itself and knowing it can grant me many advantages in the future.

• Visual C#. Since I already know a great deal about cocoa, knowing its windows equivelant might be a really good idea, since knowing the two would mean I'd be able to program for 97% of computers in existence.

• Java. Since Java is cross-platform, knowing it would mean I could write software for 99.99% of computers in existence. I've also heard that many colleges start out by teaching the students Java so learning it now could benefit me later.

• Cocoa. Take some time to learn the tons of APIs available on the mac which do not exist on the iPhone. I'm not very thrilled with this since I might finish too early and feel tha I didn't accomplish as much during the holildays as I wanted to. Nevertheless I am aware that I'll have to do this some time sooner or later.

• C and the unix OS. I can't say why but for some reason, operating systems(especially Unix) thrills me and I might like to look into that some day. OSs are written in C so knowing it would be essential. Additionally I feel somewhat bad about knowin objective-C and some C++ without knowing the "father" of these languages.

I have no time limit on anything I choose to learn or do so the time required to learn it doesn't matter. As stated, if you have any other ideas please tell me about them.

Sorry that the post got so long!

I appreciate any opinions/answers.

-BEN



asciimov
Jun 26, 2009, 08:02 PM
First Congratulations on your previous successes!

I wish I would have started seriously started programming at your age, although I doubt I would have finished my computer science degree if I had.

OpenGL - From experience this is a good way to go to start programming games. I must say that game programming is a good way to hone your programming skills, especially once you start expanding the game to include other technologies (networking, databases, threads... etc). Also, this is a great way to get a community excited about what you do (friends/family/online/etc).

Assembly - I am one of those weirdo's who actually likes assembly. It's not too hard to learn about, especially if you go want to learn about micro controllers (PICs are great (http://en.wikipedia.org/wiki/PIC_microcontroller) , motorolla's hc12 series is good but kinda wonky). If you go down the microcontroller route you can learn a ton about electrical engineering. I've built some simple synthesizers and hacked remote control cars out of PICs, robots out of HC12's (for a class). The initial cost behind microcontrollers can be a little high, but the later costs come down quite a bit.

Programming languages - it never hurts to learn more languages... they are really good for landing you a good job down the road. Once you get procedural and object oriented languages down, why not try a functional or logical programming language ( Haskell (http://en.wikipedia.org/wiki/Haskell_(programming_language)) or Prolog (http://en.wikipedia.org/wiki/Prolog) respectively). I usually like to learn try a new language every time i start a big personal project, but some times thats not practical. As far as C in concerned if you know C++ you already know a ton of C, I wouldn't focus on it, unless called for by a project. Web languages are always good for making money on the side (or full time work too).

Unix - I highly recommend you learning it, bsd or linux. I would recommend, if you don't have too much keeping you to one OS, you install unix and use it as your main os for a while. This is always a good skill to have, and I found it easier to learn to write drivers in unix than anywhere else, your mileage may vary.

As I think most people would recommend, find what ever that make you excited about programming, and do it. If you like games, make games. If your a handy app builder, do that. I would suggest always keeping an open mind to new technologies, and try to avoid any dead or dying ones.

Good Luck!

HyperSnake
Jun 27, 2009, 02:00 AM
First Congratulations on your previous successes!

I wish I would have started seriously started programming at your age, although I doubt I would have finished my computer science degree if I had.

OpenGL - From experience this is a good way to go to start programming games. I must say that game programming is a good way to hone your programming skills, especially once you start expanding the game to include other technologies (networking, databases, threads... etc). Also, this is a great way to get a community excited about what you do (friends/family/online/etc).

Assembly - I am one of those weirdo's who actually likes assembly. It's not too hard to learn about, especially if you go want to learn about micro controllers (PICs are great (http://en.wikipedia.org/wiki/PIC_microcontroller) , motorolla's hc12 series is good but kinda wonky). If you go down the microcontroller route you can learn a ton about electrical engineering. I've built some simple synthesizers and hacked remote control cars out of PICs, robots out of HC12's (for a class). The initial cost behind microcontrollers can be a little high, but the later costs come down quite a bit.

Programming languages - it never hurts to learn more languages... they are really good for landing you a good job down the road. Once you get procedural and object oriented languages down, why not try a functional or logical programming language ( Haskell (http://en.wikipedia.org/wiki/Haskell_(programming_language)) or Prolog (http://en.wikipedia.org/wiki/Prolog) respectively). I usually like to learn try a new language every time i start a big personal project, but some times thats not practical. As far as C in concerned if you know C++ you already know a ton of C, I wouldn't focus on it, unless called for by a project. Web languages are always good for making money on the side (or full time work too).

Unix - I highly recommend you learning it, bsd or linux. I would recommend, if you don't have too much keeping you to one OS, you install unix and use it as your main os for a while. This is always a good skill to have, and I found it easier to learn to write drivers in unix than anywhere else, your mileage may vary.

As I think most people would recommend, find what ever that make you excited about programming, and do it. If you like games, make games. If your a handy app builder, do that. I would suggest always keeping an open mind to new technologies, and try to avoid any dead or dying ones.

Good Luck!

Thank you for your great post. Can you tell me about some current "new technologies" and which technologies that are "dead or dying"?

SRossi
Jun 27, 2009, 05:26 AM
Do you know any C at all?

If not I would say that if you learn even a little then it will help you understand all languages that derive from it such as C#, Java and objective-C. Once you have learned C its just a matter of learning the syntax for each other language and thats you learned another language.

As for OpenGL I have basically just started learning about it only a couple of days ago after posting a thread here named "OpenGL". Personally I didnt want to make games or that but I thought it would help after seeing what Macs use OpenGL for.

And also if you are serious about programming for Macs then I would definitely recommend learning Cocoa as it is not difficult to learn especially if you know a bit of objective-C and have used the iPhone SDK.

Hope this helps.

Stephen

HyperSnake
Jun 27, 2009, 07:48 AM
Do you know any C at all?

If not I would say that if you learn even a little then it will help you understand all languages that derive from it such as C#, Java and objective-C. Once you have learned C its just a matter of learning the syntax for each other language and thats you learned another language.

As for OpenGL I have basically just started learning about it only a couple of days ago after posting a thread here named "OpenGL". Personally I didnt want to make games or that but I thought it would help after seeing what Macs use OpenGL for.

And also if you are serious about programming for Macs then I would definitely recommend learning Cocoa as it is not difficult to learn especially if you know a bit of objective-C and have used the iPhone SDK.

Hope this helps.

Stephen

Read my post please.

Taum
Jun 27, 2009, 10:16 AM
Hei

First of all congratulations on your first app :) I think I remember one of your topics about that app, and I'm glad you managed to keep working on it and finish it. Good job that you got to release it in the AppStore and apparently you got some success :D


I think all of the ideas you suggested are valid, it's really a matter of where you want to go now.

If you want to build applications for the desktop, go for C# if you want to target windows, Cocoa if you want to target Macs or Java if you want to target both. My personal preference is to Cocoa but the other choices are valid as well :)

If you're more interested in performance-intensive computing, and making things that require massive amounts of processing power (to either be fast, or operate on a lot of data), you may have a look at assembly. This as been traditionally useful to really optimize small portions of a program for a targeted platform. However today people are going more towards parallel-computing, with multi-threaded programming and GPU-computing (see Cuda, and the new technologies released in Snow Leopard : OpenCL and Grand Central).

If you want to make games, learn OpenGL. Apparently OpenGL ES available on the iPhone should not be so different, but it's not my field really ;)

You did not put Web programming in your list, but it might be something interesting to learn about. PHP might be interesting to learn the basics of Web programming, and the way HTTP works, but in my opinion it is everything a programming language should *not* be, and you'd better get away from it as soon as you can. There are a number of decent Web frameworks out there. Ruby on Rails (started by a danish guy ;)) is a good one, and I personally love ruby as a programming language. Django, which uses python, is another one. I've heard some people praise Apple's WebObjects as well...

Again it's really a matter of what you're interested in. You will always have more fun learning a not very popular technology that can make what you like, than a very popular thing you have no interest in.
It's up to you and as you guys say: lykke til !!

Catfish_Man
Jun 27, 2009, 11:13 AM
The suggestion to investigate Haskell is an interesting one. Certainly not going to be as directly "useful" for building apps, but it (or any functional language, but Haskell comes highly recommended by a lot of the people I've spoken with) would do wonders for expanding the ways of thinking you have available for tackling problems. Definitely worth considering.

Really though, if you're 14 and self motivated enough to be teaching yourself to write iPhone apps, you're going to do fine. Pick a topic, dive in, get comfortable, repeat. Keep having fun :)

HyperSnake
Jun 27, 2009, 02:58 PM
So, today I've been thinking a lot about the answers I've gotten and I've also looked up the various technologies I, as well as others, have discussed. I come to the conclusion that I would benefit the most from learning assembly, but having looked into it, I've found out it doesn't interrest me the least. On the other hand, openGL, unix and C# seems like some very interresting subjects. I think I will start learning openGL, but I'll be reading about the unix terminal alongside it. When I feel comfortable with openGL and the unix terminal, I think I will read about C#, since I currently know nothing about programming for the Windows operating system.

Once again thank you all for your informative and lengthy responses!

- BEN

lazydog
Jun 28, 2009, 07:34 AM
Hi

You might find JOGL interesting as it would combine your interest in OpenGL and Java. A really quick and fun way to use JOGL is through the Java based IDE and framework Processing (http://processing.org/). I know Java isn't C# but by all accounts the two languages are very similar (I've not actually used C#).

ί e n

newb16
Jun 28, 2009, 11:07 AM
• Assembly. I've heard assembly is very difficult and almost unusable, but I've also heard that learning assembly is learning the computer itself and knowing it can grant me many advantages in the future.


It may be 'unusable' in the sense that optimized compiler will most likely generate better code than hand-written assembly until you learn all instructions and all their gotchas. 8-bit microcontrollers' assembly, as was suggested above, has far less instructions and gotchas.

Cromulent
Jun 28, 2009, 11:49 AM
Hi

You might find JOGL interesting as it would combine your interest in OpenGL and Java. A really quick and fun way to use JOGL is through the Java based IDE and framework Processing (http://processing.org/). I know Java isn't C# but by all accounts the two languages are very similar (I've not actually used C#).

ί e n

Yep, C# is basically just Java renamed. If you know one you pretty much know the other, apart from a few small differences in terminology.

lee1210
Jun 28, 2009, 03:48 PM
There's already been a lot of input here, but i figured it was worth throwing in my $.02 now that I'm at a machine on which i can type a more detailed response.

Whatever you pick, since you're doing this in your spare time, make sure it's something that's fun and interesting to you. It's fine if you find something that holds these qualities that also overlaps with being applicable to academia/business right now, or is hip and popular. It's more important right now to just increase your exposure and further foster your interest, not have employable skills, etc.

I will start with a list of things i wouldn't pursue right now, and why:
-Fortran of any variety. If you end up working on a project that requires it, you can pick it up then. It doesn't do anything mind-bending compared to other iterative languages, even if some things are slightly easier to express.
-PHP. If you want to learn perl, do that. If you need to dynamically generate web content, there are many ways that won't poison your mind. I'm exaggerating how damaging it is, but only a little.
-C#. Others have advocated this, and if you are going to be targeting windows and don't mind things not being portable, it's not so bad. However, mono is scary to me, and I haven't seen things that are nice looking and portable from microsoft's CLR to mono. I am sure they exist, but there must be a reason they are rare. If you want to get involved in a language like this, although it has shortcomings as well, Java is a good choice.

Now some things, most of which others have mentioned, that probably would serve you well:
-Any functional language. Common Lisp, Haskell (hugs is available for OS X, it took me 5-10 minutes to get setup),Scheme (Lisp-y), etc. This will make you think differently about programming and problem solving, and that's a very good thing. You will probably not end up ever writing or working on a huge system in one of these languages, but what you learn you will apply to many problems down the line in any language.
-Javascript. If you're going to do web programming, you're going to have to know javascript. While DOM interaction across browsers is infuriating, that is not what I'm advocating learning. I'm talking about the language, and how functions are treated, objects, etc.
-Algorithms. The syntax is not the difficult part of programming, solving problems is. People have solved a lot of problems already, and reading about various approaches, their tradeoffs in execution time vs. memory usage, etc. will serve you very well.
-Assembly Language. I would advise against x86 ASM, but if you pick a RISC it shouldn't be too hard. You should learn this not because you can beat the compiler at optimizing in most cases, but to figure out how the machine works and why some things take so much longer than others, and what's really going on at the micro-architectural level. SPIM is available for OS X, and it's a pretty nice MIPS emulator. It took me 15-20 minutes to get setup.
-Some EE stuff. Others have mentioned combining this with the ASM, and getting a hold of a little board that you can program. I haven't gotten a chance to explore this much, but I think that getting involved in the hardware side and "making things happen" is pretty interesting.

This doesn't add much to what others have said, but i thought a little extra information and votes in certain directions might help.

-Lee

macsmurf
Jun 28, 2009, 08:18 PM
There are many options. I was fortunate enough to have fewer options when I was your age, so I played around with pascal and DOS.

I think that you should pick a language and learn it well. Functional languages are interesting but they are very different from imperative languages so it might be better to put that on the back burner for now.

I would go with java or C# if you want to learn OOP. Both are relatively clean object-oriented languages.

Python is multi-paradigm and can be confusing, but it΄s very good to get stuff done.

Ruby is object-oriented, a lot of fun, and not as verbose as Java. I'd be inclined to recommend it if you're up for the challenge. Then again, Java is easier to get a handle on.

I would stay away from Fortran and perl.

If you're mathematically inclined, http://projecteuler.net/ might be for you :)