|
Thread Rules 1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution. 2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20) 3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible. 4. Use [code] tags to format code blocks. |
On January 28 2013 14:30 HeavenS wrote:+ Show Spoiler + Hey guys this thread seems very very informative. I seem to have gotten late to the party, wow 233 pages! Anyways im kinda having a bit of an issue. You see, i was a civil engineering major, however as of lately ive really lost interest in it. I've found that as i learn more and more about what the daily job of a civil engineer is, it interests me less and less. This kinda sucks because it was really all i had thought about studying, however im pretty much about 90% sure that im going to switch my major now rather than finish it only to be bored of it! Seeing as how i like computers so much, and i love visiting the xda-dev website to read up on topics and it always amazes me how the devs there accomplish things, i've thought that maybe software engineering would be a good major to switch to. I think it might offer me that space to be creative and i could put the skills learned to making my own programs in my spare time and who knows maybe even an app or something.
I've also read that job prospects are very good and you can be employed in a great variety of places. The major i was eyeing is Computer Science, with a software development track (as is stated by my university). Switching to this major would allow me to make use of the math that i've learned thus far and i wouldn't have to start from zero because of the overlapping classes up to a certain point. However, i have never EVER done any programming whatsoever and honestly don't even know where to start. So here's my question to you guys. I have four months of free time until my semester at the uni starts and i want to put it to good use. I want to dip my feet into programming so when i start Uni i wont be completely clueless. I THINK the first programming course at the Uni is Java. That being said, what should i devote these next four months to? I obviously read the op but its still not clear to me which language i should devote to first? Should i start with java since i'll be learning java first course anyways? Or should i do c++? IDK! please give me some advice!
The first thing you must learn is very central to programming discussions:
There are a lot of people who hate certain languages, and they will appear constantly on the internet disparaging X language because of Y. It's in fashion at the moment for people to shit on Java, and you'll see a LOT of people complaining about it and posting snippets of bad code and saying "ha look how bad java is!" These people exist for every language.
The fact of the matter is, just as Da Vinci would've been a great artist with a paintbrush, a pencil or whatever, a good programmer will be good with any language that's suitable for the job. Part of being a good programmer is knowing what's suitable for the job. For learning programming, it really won't matter. That said, you have good and bad choices for starting off.
Java is an OO language, which means object-oriented. It is built around the programmer defining data types (classes) and access to these data types (methods). C++ also has classes and can also be an OO language. There are others too, C# being notable. Other languages are "functional" and require a different way of thinking about solving a problem. Obviously, if you're going to be doing Java at Uni, you'll benefit most from starting with an OO language so you have the mindset right. Programming with OO is all about good structure and design, and planning ahead so you have a sensible structure.
Other than recommending you start with an OO language since you'll be studying java, it really doesn't matter what you pick as long as (and this is important) you learn in the right way. Instead of just taking it for granted that a piece of code works, you need to learn why the programmer did it that way, and what the benefits are.
C++ is an immensely complex language with a lot of shit that can cause serious problems if you do it wrong. There are a lot of little rules and tricks and things you need to learn to avoid very nasty bugs that can be a real pain to find and fix. But its complexity stems from a philosophy of giving total control to the programmer. As such, if a computer can be made to do something, chances are you can program it in C++ (or C, but C doesn't really have OO so learning C++ might be better).
Java is based heavily on C++ but removes some of of the really complex stuff, taking a little control from the user to make life easier. In C++ when you get a piece of memory, you have to remember to delete its contents too or it'll just kinda stay there (this is called a memory leak, and leads to inefficiency and can lead to crashes if you leak a lot). In Java, the environment in which you run programs handles the deletion for you (this is called GC, or garbage collection) which has positives (much lesser chance of leaks) and negatives (it can be difficult to control this, leading to "GC lag" when garbage is collected at a performance intensive time). There are many other differences.
If you start with C++, you're more likely to pick up on how a computer works in detail. Java/other languages place a cushion between you and the computer so you might miss out on some of that. But then in Java it might be argued that you'll learn programming quicker since you don't have to worry about the more complex stuff.
Whatever you learn, you need to start programming and get used to it all. So just pick one and go, and you'll do fine.
I personally taught myself C++ first, and learnt a lot from that, but if you want an easier time at uni, you can start with Java too. Just start
|
On January 28 2013 16:06 SgtCoDFish wrote:Show nested quote +On January 28 2013 14:30 HeavenS wrote:+ Show Spoiler + Hey guys this thread seems very very informative. I seem to have gotten late to the party, wow 233 pages! Anyways im kinda having a bit of an issue. You see, i was a civil engineering major, however as of lately ive really lost interest in it. I've found that as i learn more and more about what the daily job of a civil engineer is, it interests me less and less. This kinda sucks because it was really all i had thought about studying, however im pretty much about 90% sure that im going to switch my major now rather than finish it only to be bored of it! Seeing as how i like computers so much, and i love visiting the xda-dev website to read up on topics and it always amazes me how the devs there accomplish things, i've thought that maybe software engineering would be a good major to switch to. I think it might offer me that space to be creative and i could put the skills learned to making my own programs in my spare time and who knows maybe even an app or something.
I've also read that job prospects are very good and you can be employed in a great variety of places. The major i was eyeing is Computer Science, with a software development track (as is stated by my university). Switching to this major would allow me to make use of the math that i've learned thus far and i wouldn't have to start from zero because of the overlapping classes up to a certain point. However, i have never EVER done any programming whatsoever and honestly don't even know where to start. So here's my question to you guys. I have four months of free time until my semester at the uni starts and i want to put it to good use. I want to dip my feet into programming so when i start Uni i wont be completely clueless. I THINK the first programming course at the Uni is Java. That being said, what should i devote these next four months to? I obviously read the op but its still not clear to me which language i should devote to first? Should i start with java since i'll be learning java first course anyways? Or should i do c++? IDK! please give me some advice! The first thing you must learn is very central to programming discussions: There are a lot of people who hate certain languages, and they will appear constantly on the internet disparaging X language because of Y. It's in fashion at the moment for people to shit on Java, and you'll see a LOT of people complaining about it and posting snippets of bad code and saying "ha look how bad java is!" These people exist for every language. The fact of the matter is, just as Da Vinci would've been a great artist with a paintbrush, a pencil or whatever, a good programmer will be good with any language that's suitable for the job. Part of being a good programmer is knowing what's suitable for the job. For learning programming, it really won't matter. That said, you have good and bad choices for starting off. Java is an OO language, which means object-oriented. It is built around the programmer defining data types (classes) and access to these data types (methods). C++ also has classes and can also be an OO language. There are others too, C# being notable. Other languages are "functional" and require a different way of thinking about solving a problem. Obviously, if you're going to be doing Java at Uni, you'll benefit most from starting with an OO language so you have the mindset right. Programming with OO is all about good structure and design, and planning ahead so you have a sensible structure. You list 3 Object Oriented languages and then describe other languages as "functional;" I guess technically you could argue you didn't say all other languages are functional, but it'd be easy for someone to think you did.
Here is a quick list of Object Oriented Languages: + Show Spoiler + ABAP Ada 95 AmigaE BETA Blue Boo C++ C# Chapel Clarion CLU COBOL Cobra ColdFusion Common Lisp COOL CorbaScript Curl D Dylan E Eiffel Sather Falcon Fancy Fortran 2003 FPr FreeBASIC F-Script F# Gambas Graphtalk IDLscript J JADE Java Groovy Join Java X10 Lasso Lava Lexico Lingo LISP Logtalk MATLAB Modula-2 Modula-3 Nemerle NetRexx Noop Oberon (Oberon-1) Oberon-2 Object Pascal Delphi Free Pascal Turbo Pascal Object REXX Objective-C OCaml Omnis Studio Oz Mozart Programming System Perl since v5 PHP5 Power Builder PRM[disambiguation needed] Prototype-based languages Actor-Based Concurrent Languages: ABCL/1, ABCL/R, ABCL/R2, ABCL/c+ Agora Cecil Cel ECMAScript ActionScript JavaScript JScript Etoys in Squeak Io Lua Lisaac MOO NewtonScript Obliq REBOL Self Python REALbasic Revolution Ruby S R Scala Seed7 SenseTalk Simula Smalltalk Self Bistro Squeak Squirrel Superx++ TADS Tcl Xotcl similar to CLOS Snit uses delegation incr Tcl (itcl) similar to C++ Ubercode Visual Basic Visual Basic .NET (VB.NET) VBScript Visual Basic for Applications (VBA) Visual FoxPro Visual Prolog XBase++ extends xBase standard language ZZT-oop
Here are a list of functional programming languages + Show Spoiler + Charity Clean Curry Haskell Hope Miranda APL ATS Candle Curl Erlang F# FPr CAL Hop J Joy Kite Lisp Clojure Common Lisp Dylan eLisp Emacs Lisp Little b Logo Scheme Racket (formerly PLT Scheme) Tea Lush Mathematica ML Standard ML Alice OCaml Mythryl Nemerle Opal OPS5 Poplog Q (equational programming language) Q (programming language from Kx Systems) R REFAL Russell Scala Spreadsheets
You'll notice the list is significantly shorter; most modern programming languages are object orients. You'll notice something else too: there is a TON of overlap. Object Oriented and Functional are not two sides of the same coin. You can have both. What's more, if you look at a lot of languages that are successors to Smalltalk (like Python, Ruby, C#), we'll notice they've adopted a lot of functional paradigms. There is even talk of making functions first class objects in the next edition of java ( http://en.wikipedia.org/wiki/Java_version_history#Java_SE_8 ).
Other than recommending you start with an OO language since you'll be studying java, it really doesn't matter what you pick as long as (and this is important) you learn in the right way. Instead of just taking it for granted that a piece of code works, you need to learn why the programmer did it that way, and what the benefits are.
C++ is an immensely complex language with a lot of shit that can cause serious problems if you do it wrong. There are a lot of little rules and tricks and things you need to learn to avoid very nasty bugs that can be a real pain to find and fix. But its complexity stems from a philosophy of giving total control to the programmer. As such, if a computer can be made to do something, chances are you can program it in C++ (or C, but C doesn't really have OO so learning C++ might be better).
Java is based heavily on C++ but removes some of of the really complex stuff, taking a little control from the user to make life easier. In C++ when you get a piece of memory, you have to remember to delete its contents too or it'll just kinda stay there (this is called a memory leak, and leads to inefficiency and can lead to crashes if you leak a lot). In Java, the environment in which you run programs handles the deletion for you (this is called GC, or garbage collection) which has positives (much lesser chance of leaks) and negatives (it can be difficult to control this, leading to "GC lag" when garbage is collected at a performance intensive time). There are many other differences.
Emphasis mine. This is probably the most important point you make in your entire post. When choosing a programming language control is a feature. Languages like Java, C#, Ruby all have memory management built into them. This doesn't mean you can't have a memory leak (I've had tons in Java), just that you don't have to constantly be concerned with allocating and freeing memory for your objects.
Another major axis of control people like to work on is typing. Static vs Dynamic, Strong vs Weak. Here Java chooses to give you more control at the cost of making your life harder. Programming languages like Python and PHP, choose dynamic typing. This takes away a little control to make life easier. C++ programmers tend you really like having full control. By comparison a Ruby programmer prefers to give up that control for ease of use.
If you start with C++, you're more likely to pick up on how a computer works in detail. Java/other languages place a cushion between you and the computer so you might miss out on some of that. But then in Java it might be argued that you'll learn programming quicker since you don't have to worry about the more complex stuff. Whatever you learn, you need to start programming and get used to it all. So just pick one and go, and you'll do fine. I personally taught myself C++ first, and learnt a lot from that, but if you want an easier time at uni, you can start with Java too. Just start  I highly recommend you start with C instead of C++. In many ways C++ is like a super set of C (it's not, but very close). However, those extra features (inheritance, polymorphism, etc) are very complex and can easily confuse you while you're still trying to work out concepts like pointers and recursion.
However, if you'd prefer to try another language out, it'd be worth looking at: http://koans.heroku.com/ (Ruby) or http://www.codecademy.com/#!/exercises/0 (Javascript, but has options for Python or Ruby)
Both online and you can start learning right now.
|
Is C# worth learning? I know a good deal of other languages but one thing that I've noticed is that most job interviews ask about C#, which is something that I'm not familiar with. Why is C# so popular? Is it worth learning?
I realize that this is an incredibly subjective question, but I would appreciate any insight since I am on the fence about it. On one hand it seems popular but on the other hand I think there are other languages that accomplish what C# can do that I have already studied...
Thanks in advance.
|
On January 28 2013 17:23 frogmelter wrote: Is C# worth learning? I know a good deal of other languages but one thing that I've noticed is that most job interviews ask about C#, which is something that I'm not familiar with. Why is C# so popular? Is it worth learning?
I realize that this is an incredibly subjective question, but I would appreciate any insight since I am on the fence about it. On one hand it seems popular but on the other hand I think there are other languages that accomplish what C# can do that I have already studied...
Thanks in advance. C# is very similar to Java, but designed to handle a lot of things better than Java does (e.g. having first-class functions, a better type system, better generics). If you already know Java I think you could pick it up fairly quickly, and if I had to choose between the two I'd choose C# every time.
I don't think I'd ever say "don't learn X language" if you have the time, every language has something to offer and can help you think in new and helpful ways (even when you're using other languages). Once you get to a certain point in your knowledge, becoming mildly productive in a new language takes very little time, so why not play around with a language for a bit even if it won't be immediately useful to you? I don't know if you're at that point yet, but in any case, it can't hurt
|
On January 28 2013 14:30 HeavenS wrote: Hey guys this thread seems very very informative. I seem to have gotten late to the party, wow 233 pages! Anyways im kinda having a bit of an issue. You see, i was a civil engineering major, however as of lately ive really lost interest in it. I've found that as i learn more and more about what the daily job of a civil engineer is, it interests me less and less. This kinda sucks because it was really all i had thought about studying, however im pretty much about 90% sure that im going to switch my major now rather than finish it only to be bored of it! Seeing as how i like computers so much, and i love visiting the xda-dev website to read up on topics and it always amazes me how the devs there accomplish things, i've thought that maybe software engineering would be a good major to switch to. I think it might offer me that space to be creative and i could put the skills learned to making my own programs in my spare time and who knows maybe even an app or something.
I've also read that job prospects are very good and you can be employed in a great variety of places. The major i was eyeing is Computer Science, with a software development track (as is stated by my university). Switching to this major would allow me to make use of the math that i've learned thus far and i wouldn't have to start from zero because of the overlapping classes up to a certain point. However, i have never EVER done any programming whatsoever and honestly don't even know where to start. So here's my question to you guys. I have four months of free time until my semester at the uni starts and i want to put it to good use. I want to dip my feet into programming so when i start Uni i wont be completely clueless. I THINK the first programming course at the Uni is Java. That being said, what should i devote these next four months to? I obviously read the op but its still not clear to me which language i should devote to first? Should i start with java since i'll be learning java first course anyways? Or should i do c++? IDK! please give me some advice!
Speaking with extreme bias as a computer science educator, start with Java, especially if your university intro class uses it. Develop strong programming fundamentals in your independent study as well as your intro courses. Java, for all its warts and ugliness, is an ok language to start with. For self-study, low-level languages like C and C++ require too much knowledge up-front to get properly, and are best tackled when you have some background and intuition built up already.
At a bare minimum, with respect to programming, you should expose yourself to at least three different sorts of languages:
+ An everyday programming language that is imperative and (usually) object-oriented such as Java, C#, or Python. + A systems programming language that exposes low-level details and forces you think at the intersection of hardware and software such as C and C++. + A functional programming language that exposes the necessity of abstraction and mathematical reasoning within software development such as Lisp/Scheme, OCaml/ML, Scala, or Haskell.
If your degree program doesn't expose you to one of these paradigms, it behooves you as a good computer scientist to take it upon yourself to get that exposure via self-study before you graduate. The difference in programming knowledge between someone who has exposure to these different paradigms and someone who hasn't on the interview loop is like day and night.
|
On January 28 2013 17:23 frogmelter wrote: Is C# worth learning? I know a good deal of other languages but one thing that I've noticed is that most job interviews ask about C#, which is something that I'm not familiar with. Why is C# so popular? Is it worth learning?
I realize that this is an incredibly subjective question, but I would appreciate any insight since I am on the fence about it. On one hand it seems popular but on the other hand I think there are other languages that accomplish what C# can do that I have already studied...
Thanks in advance. It is Java done better Not that it does not have things that make you cringe. Also if you come from C/C++ background you will be pleased by the syntax, much less verbose than Java.
|
On January 28 2013 20:54 Kambing wrote:Show nested quote +On January 28 2013 14:30 HeavenS wrote: Hey guys this thread seems very very informative. I seem to have gotten late to the party, wow 233 pages! Anyways im kinda having a bit of an issue. You see, i was a civil engineering major, however as of lately ive really lost interest in it. I've found that as i learn more and more about what the daily job of a civil engineer is, it interests me less and less. This kinda sucks because it was really all i had thought about studying, however im pretty much about 90% sure that im going to switch my major now rather than finish it only to be bored of it! Seeing as how i like computers so much, and i love visiting the xda-dev website to read up on topics and it always amazes me how the devs there accomplish things, i've thought that maybe software engineering would be a good major to switch to. I think it might offer me that space to be creative and i could put the skills learned to making my own programs in my spare time and who knows maybe even an app or something.
I've also read that job prospects are very good and you can be employed in a great variety of places. The major i was eyeing is Computer Science, with a software development track (as is stated by my university). Switching to this major would allow me to make use of the math that i've learned thus far and i wouldn't have to start from zero because of the overlapping classes up to a certain point. However, i have never EVER done any programming whatsoever and honestly don't even know where to start. So here's my question to you guys. I have four months of free time until my semester at the uni starts and i want to put it to good use. I want to dip my feet into programming so when i start Uni i wont be completely clueless. I THINK the first programming course at the Uni is Java. That being said, what should i devote these next four months to? I obviously read the op but its still not clear to me which language i should devote to first? Should i start with java since i'll be learning java first course anyways? Or should i do c++? IDK! please give me some advice! Speaking with extreme bias as a computer science educator, start with Java, especially if your university intro class uses it. Develop strong programming fundamentals in your independent study as well as your intro courses. Java, for all its warts and ugliness, is an ok language to start with. For self-study, low-level languages like C and C++ require too much knowledge up-front to get properly, and are best tackled when you have some background and intuition built up already. At a bare minimum, with respect to programming, you should expose yourself to at least three different sorts of languages: + An everyday programming language that is imperative and (usually) object-oriented such as Java, C#, or Python. + A systems programming language that exposes low-level details and forces you think at the intersection of hardware and software such as C and C++. + A functional programming language that exposes the necessity of abstraction and mathematical reasoning within software development such as Lisp/Scheme, OCaml/ML, Scala, or Haskell. If your degree program doesn't expose you to one of these paradigms, it behooves you as a good computer scientist to take it upon yourself to get that exposure via self-study before you graduate. The difference in programming knowledge between someone who has exposure to these different paradigms and someone who hasn't on the interview loop is like day and night. I would argue that you should start with language that is not OO and does not have pointers. It is hard to find currently useful language that satisfies both and in that case go with the one that is not OO. Proper OO programming is much harder to do well than learning pointers. Without good knowledge of structural programming you run big risk of developing bad habits if you start with OO language due to being overwhelmed with the features that have nothing to do with basics of programming.
|
On January 28 2013 20:54 Kambing wrote:Show nested quote +On January 28 2013 14:30 HeavenS wrote: Hey guys this thread seems very very informative. I seem to have gotten late to the party, wow 233 pages! Anyways im kinda having a bit of an issue. You see, i was a civil engineering major, however as of lately ive really lost interest in it. I've found that as i learn more and more about what the daily job of a civil engineer is, it interests me less and less. This kinda sucks because it was really all i had thought about studying, however im pretty much about 90% sure that im going to switch my major now rather than finish it only to be bored of it! Seeing as how i like computers so much, and i love visiting the xda-dev website to read up on topics and it always amazes me how the devs there accomplish things, i've thought that maybe software engineering would be a good major to switch to. I think it might offer me that space to be creative and i could put the skills learned to making my own programs in my spare time and who knows maybe even an app or something.
I've also read that job prospects are very good and you can be employed in a great variety of places. The major i was eyeing is Computer Science, with a software development track (as is stated by my university). Switching to this major would allow me to make use of the math that i've learned thus far and i wouldn't have to start from zero because of the overlapping classes up to a certain point. However, i have never EVER done any programming whatsoever and honestly don't even know where to start. So here's my question to you guys. I have four months of free time until my semester at the uni starts and i want to put it to good use. I want to dip my feet into programming so when i start Uni i wont be completely clueless. I THINK the first programming course at the Uni is Java. That being said, what should i devote these next four months to? I obviously read the op but its still not clear to me which language i should devote to first? Should i start with java since i'll be learning java first course anyways? Or should i do c++? IDK! please give me some advice! Speaking with extreme bias as a computer science educator, start with Java, especially if your university intro class uses it. Develop strong programming fundamentals in your independent study as well as your intro courses. Java, for all its warts and ugliness, is an ok language to start with. For self-study, low-level languages like C and C++ require too much knowledge up-front to get properly, and are best tackled when you have some background and intuition built up already. At a bare minimum, with respect to programming, you should expose yourself to at least three different sorts of languages: + An everyday programming language that is imperative and (usually) object-oriented such as Java, C#, or Python. + A systems programming language that exposes low-level details and forces you think at the intersection of hardware and software such as C and C++. + A functional programming language that exposes the necessity of abstraction and mathematical reasoning within software development such as Lisp/Scheme, OCaml/ML, Scala, or Haskell. If your degree program doesn't expose you to one of these paradigms, it behooves you as a good computer scientist to take it upon yourself to get that exposure via self-study before you graduate. The difference in programming knowledge between someone who has exposure to these different paradigms and someone who hasn't on the interview loop is like day and night.
I'll second this.
Personally I really dislike Java these days, but it was the first language I learnt at uni (physics) and I can see why as from the position of knowing nothing it is a straight forward language to get to grips with.
You shouldn't fear C/C++ as much if you have an engineering background, you'll understand hardware a bit better, same with functional programming as you'll have a good mathematical background to base the ideas on.
Don't expect to understand everything at once though, I'm sure with your current major you've learnt this already, but these concepts can take a while to fully understand, and require different perspectives. For example, I didn't really understand what an 'imperative' language was until I started learning about functional languages, whilst I knew these things about the languages I'd used before, I hadn't put 2 and 2 together to understand the idea behind it.
I'll add some further recommendations and that's IDE's. You want to learn how to program well, you need to understand your programs, and nothing is better than a good debugger.
You should really try to familiarize yourself with Visual Studio and Eclipse at the minimum, Visual Studio for C/C++/C# and Eclipse for Java. You can use plugins for both to support Python etc Personally I prefer VS but thats because I work in it every day and I'm used to how it operates. I didn't learn how to debug a program till I left uni and got a job, and looking back its safe to say that was stupid of me, it may be a bit frustrating at first but learning how to step through your program and know exactly whats happening is obviously extremely useful.
As far as what you can do and what you should learn I think if you can do the following task you could consider yourself familiar with some of the basics:
Take a text file with names and ages like:
James 12 John 19 Ellie 28
Just a list like that, and write a program to extract that data from the file and put it in a list / hash tables / something. Then use said something to sort the information, both by name or by age.
Start with Java as that will be the most straight forward. Then try it in C or C++, I'm not that familiar with C++ so I don't know if there would be much difference, but either way it will be more complicated than Java (C at least). Once you're familiar with how this works then maybe move on to something a little more complex like graphics.
Really though, the best thing to do is to just find a project and go for it. Learn what you need to as you go and pay attention to the little things, so when you're sorting, maybe look at how to do it one way, then another, see the pros and cons and implement both, experiment and play around to figure out what works and what doesn't.
Really though, for now, don't worry about the language. Worry about what you can do with it, then learn what you can do in one language in another, you'll learn the pros and cons of them and then you can start to form your own opinions.
|
On January 28 2013 22:35 mcc wrote:Show nested quote +On January 28 2013 20:54 Kambing wrote:On January 28 2013 14:30 HeavenS wrote: Hey guys this thread seems very very informative. I seem to have gotten late to the party, wow 233 pages! Anyways im kinda having a bit of an issue. You see, i was a civil engineering major, however as of lately ive really lost interest in it. I've found that as i learn more and more about what the daily job of a civil engineer is, it interests me less and less. This kinda sucks because it was really all i had thought about studying, however im pretty much about 90% sure that im going to switch my major now rather than finish it only to be bored of it! Seeing as how i like computers so much, and i love visiting the xda-dev website to read up on topics and it always amazes me how the devs there accomplish things, i've thought that maybe software engineering would be a good major to switch to. I think it might offer me that space to be creative and i could put the skills learned to making my own programs in my spare time and who knows maybe even an app or something.
I've also read that job prospects are very good and you can be employed in a great variety of places. The major i was eyeing is Computer Science, with a software development track (as is stated by my university). Switching to this major would allow me to make use of the math that i've learned thus far and i wouldn't have to start from zero because of the overlapping classes up to a certain point. However, i have never EVER done any programming whatsoever and honestly don't even know where to start. So here's my question to you guys. I have four months of free time until my semester at the uni starts and i want to put it to good use. I want to dip my feet into programming so when i start Uni i wont be completely clueless. I THINK the first programming course at the Uni is Java. That being said, what should i devote these next four months to? I obviously read the op but its still not clear to me which language i should devote to first? Should i start with java since i'll be learning java first course anyways? Or should i do c++? IDK! please give me some advice! Speaking with extreme bias as a computer science educator, start with Java, especially if your university intro class uses it. Develop strong programming fundamentals in your independent study as well as your intro courses. Java, for all its warts and ugliness, is an ok language to start with. For self-study, low-level languages like C and C++ require too much knowledge up-front to get properly, and are best tackled when you have some background and intuition built up already. At a bare minimum, with respect to programming, you should expose yourself to at least three different sorts of languages: + An everyday programming language that is imperative and (usually) object-oriented such as Java, C#, or Python. + A systems programming language that exposes low-level details and forces you think at the intersection of hardware and software such as C and C++. + A functional programming language that exposes the necessity of abstraction and mathematical reasoning within software development such as Lisp/Scheme, OCaml/ML, Scala, or Haskell. If your degree program doesn't expose you to one of these paradigms, it behooves you as a good computer scientist to take it upon yourself to get that exposure via self-study before you graduate. The difference in programming knowledge between someone who has exposure to these different paradigms and someone who hasn't on the interview loop is like day and night. I would argue that you should start with language that is not OO and does not have pointers. It is hard to find currently useful language that satisfies both and in that case go with the one that is not OO. Proper OO programming is much harder to do well than learning pointers. Without good knowledge of structural programming you run big risk of developing bad habits if you start with OO language due to being overwhelmed with the features that have nothing to do with basics of programming.
I agree that (good) object-oriented design is an advanced topic and there's a plethora of programming-in-the-small skills that one should become versed in before tackling it. That being said, the most pragmatic language you can start with (from the perspective of a undergraduate in computer science) is Java. This is mostly because the curriculum of virtually every computer science degree will assume some familiarity with Java, so getting a head start on it is a good idea. When I teach intro CS, I leave out the OO until the end of the course. This has the downside of ingraining some un-idiomatic Java habits in students, but the trade-off in understanding is worth it. And, from what I've seen, students quickly adjust to doing "the right thing" in Java relatively quickly.
In a world where I'm not bound to curriculum requirements, Python is an excellent balance of simplicity, support, and practicality. It is difficult to teaching good OO principles in Python due to the lack of (static) types, but up to that point, its (almost) perfect.
EDIT: alternatively, if I wasn't bound to any curriculum requirements, I would strongly considering starting out a new student in OCaml or Haskell. Imperative programming is fundamentally difficult and beginner-unfriendly like OO (but for different reasons). Functional programming, on the other hand, focuses on the principles you want to emphasize -- decomposition, recursion, and abstraction.
|
On January 29 2013 00:32 Kambing wrote:Show nested quote +On January 28 2013 22:35 mcc wrote:On January 28 2013 20:54 Kambing wrote:On January 28 2013 14:30 HeavenS wrote: Hey guys this thread seems very very informative. I seem to have gotten late to the party, wow 233 pages! Anyways im kinda having a bit of an issue. You see, i was a civil engineering major, however as of lately ive really lost interest in it. I've found that as i learn more and more about what the daily job of a civil engineer is, it interests me less and less. This kinda sucks because it was really all i had thought about studying, however im pretty much about 90% sure that im going to switch my major now rather than finish it only to be bored of it! Seeing as how i like computers so much, and i love visiting the xda-dev website to read up on topics and it always amazes me how the devs there accomplish things, i've thought that maybe software engineering would be a good major to switch to. I think it might offer me that space to be creative and i could put the skills learned to making my own programs in my spare time and who knows maybe even an app or something.
I've also read that job prospects are very good and you can be employed in a great variety of places. The major i was eyeing is Computer Science, with a software development track (as is stated by my university). Switching to this major would allow me to make use of the math that i've learned thus far and i wouldn't have to start from zero because of the overlapping classes up to a certain point. However, i have never EVER done any programming whatsoever and honestly don't even know where to start. So here's my question to you guys. I have four months of free time until my semester at the uni starts and i want to put it to good use. I want to dip my feet into programming so when i start Uni i wont be completely clueless. I THINK the first programming course at the Uni is Java. That being said, what should i devote these next four months to? I obviously read the op but its still not clear to me which language i should devote to first? Should i start with java since i'll be learning java first course anyways? Or should i do c++? IDK! please give me some advice! Speaking with extreme bias as a computer science educator, start with Java, especially if your university intro class uses it. Develop strong programming fundamentals in your independent study as well as your intro courses. Java, for all its warts and ugliness, is an ok language to start with. For self-study, low-level languages like C and C++ require too much knowledge up-front to get properly, and are best tackled when you have some background and intuition built up already. At a bare minimum, with respect to programming, you should expose yourself to at least three different sorts of languages: + An everyday programming language that is imperative and (usually) object-oriented such as Java, C#, or Python. + A systems programming language that exposes low-level details and forces you think at the intersection of hardware and software such as C and C++. + A functional programming language that exposes the necessity of abstraction and mathematical reasoning within software development such as Lisp/Scheme, OCaml/ML, Scala, or Haskell. If your degree program doesn't expose you to one of these paradigms, it behooves you as a good computer scientist to take it upon yourself to get that exposure via self-study before you graduate. The difference in programming knowledge between someone who has exposure to these different paradigms and someone who hasn't on the interview loop is like day and night. I would argue that you should start with language that is not OO and does not have pointers. It is hard to find currently useful language that satisfies both and in that case go with the one that is not OO. Proper OO programming is much harder to do well than learning pointers. Without good knowledge of structural programming you run big risk of developing bad habits if you start with OO language due to being overwhelmed with the features that have nothing to do with basics of programming. I agree that (good) object-oriented design is an advanced topic and there's a plethora of programming-in-the-small skills that one should become versed in before tackling it. That being said, the most pragmatic language you can start with (from the perspective of a undergraduate in computer science) is Java. This is mostly because the curriculum of virtually every computer science degree will assume some familiarity with Java, so getting a head start on it is a good idea. When I teach intro CS, I leave out the OO until the end of the course. This has the downside of ingraining some un-idiomatic Java habits in students, but the trade-off in understanding is worth it. And, from what I've seen, students quickly adjust to doing "the right thing" in Java relatively quickly. In a world where I'm not bound to curriculum requirements, Python is an excellent balance of simplicity, support, and practicality. It is difficult to teaching good OO principles in Python due to the lack of (static) types, but up to that point, its (almost) perfect. EDIT: alternatively, if I wasn't bound to any curriculum requirements, I would strongly considering starting out a new student in OCaml or Haskell. Imperative programming is fundamentally difficult and beginner-unfriendly like OO (but for different reasons). Functional programming, on the other hand, focuses on the principles you want to emphasize -- decomposition, recursion, and abstraction. I see, I was talking from the position of not being bound by curriculum (and I think that putting Java as starting language was a mistake that majority of schools made due to various reasons). If you are bound by curriculum then yes, it probably makes a lot of sense.
Python seems like a good candidate, although I dislike purely dynamic languages. Unfortunately no simple strongly-typed language survived to this day as a practical language. Shame that Pascal went away, if it evolved a bit it would be a good teaching language.
Also since we are discussing which languages to learn : people should learn D more, awesome language. Shame it didn't get the community or corporate backing it deserves and thus lacks extensive libraries that make or break languages in today's world. I hope C# designers take all they can from it
|
I really wish a dialect of BASIC were still supported. My first exposure to programming was my dad teaching me the basics (hah) of QBASIC on a Tandy-1000, and from what I remember it's a pretty ideal environment for a new programmer. It supports text output and basic graphics without any external libraries, so you can have a working "hello world" program as a beginner in less than a minute, and do something fun like move a circle around the screen with keyboard controls in an hour or two.
|
On January 29 2013 17:40 AmericanUmlaut wrote: I really wish a dialect of BASIC were still supported. My first exposure to programming was my dad teaching me the basics (hah) of QBASIC on a Tandy-1000, and from what I remember it's a pretty ideal environment for a new programmer. It supports text output and basic graphics without any external libraries, so you can have a working "hello world" program as a beginner in less than a minute, and do something fun like move a circle around the screen with keyboard controls in an hour or two. Visual Basic .Net is still used a lot in custom business software. I use it everyday at my work, and many of our custom apps used throughout our business are written in VB.NET. A lot of people swear to C#, but frankly there's no difference - it's just a matter of preference.
|
VB is quite a lot different than BASIC, though. Hello world in BASIC is
10 print "hello world" which you can teach a 5 year old in 30 seconds (as I know from my own childhood experience). Getting a simple program up and running in VB is significantly more work, and doing anything with graphics requires a bunch of API calls.
|
On January 30 2013 01:44 enigmaticcam wrote:Show nested quote +On January 29 2013 17:40 AmericanUmlaut wrote: I really wish a dialect of BASIC were still supported. My first exposure to programming was my dad teaching me the basics (hah) of QBASIC on a Tandy-1000, and from what I remember it's a pretty ideal environment for a new programmer. It supports text output and basic graphics without any external libraries, so you can have a working "hello world" program as a beginner in less than a minute, and do something fun like move a circle around the screen with keyboard controls in an hour or two. Visual Basic .Net is still used a lot in custom business software. I use it everyday at my work, and many of our custom apps used throughout our business are written in VB.NET. A lot of people swear to C#, but frankly there's no difference - it's just a matter of preference. Nope it is not. C# is well designed language, Visual Basic is work of the devil and should have never seen the light of day. Just because something allows you to program the same things as something else does not mean they are equal. Do not mention VB or he will jump out of the wall and eat you 
EDIT: It is used because Microsoft was once upon a time pushing it and it got popular among people who either should not have been programming corporate software at all or did not know better. I heard that the .Net version is better than the hell that was pre-.Net VB, but it is still terribly designed language, definitely unsuitable for teaching people basics of programming.
|
On January 30 2013 01:52 mcc wrote:Nope it is not. C# is well designed language, Visual Basic is work of the devil and should have never seen the light of day. Just because something allows you to program the same things as something else does not mean they are equal. Do not mention VB or he will jump out of the wall and eat you  The only thing C#.NET has to offer that VB.NET doesn't is an invitation to the circle jerk of C# users who look down their noses at the rest of us who still use VB. There is no difference between the two. The only advantage that can be argued is that learning C# translates easier to other languages that are similar to C.
|
On January 30 2013 02:02 enigmaticcam wrote:Show nested quote +On January 30 2013 01:52 mcc wrote:Nope it is not. C# is well designed language, Visual Basic is work of the devil and should have never seen the light of day. Just because something allows you to program the same things as something else does not mean they are equal. Do not mention VB or he will jump out of the wall and eat you  The only thing C#.NET has to offer that VB.NET doesn't is an invitation to the circle jerk of C# users who look down their noses at the rest of us who still use VB. There is no difference between the two. The only advantage that can be argued is that learning C# translates easier to other languages that are similar to C. Yes, I look down on the language as it is example of terrible language design. I do not look down on programmers that work with it, I was forced to work in VB too. There is more to language design than what you can do with a language. I can (theoretically) write in brainfuck what I can in C#, does not mean one is not superior language over the other. That is rather strained comparison, but even in case of languages of similar type some are easily better designed than others.
But comparing it with C# is kind of out there, VB was designed as scripting language and has no place in most cases where C# should be used. Problem is if I need to use scripting language I will not pick VB if I can avoid it as there are plenty better choices.
|
On January 30 2013 02:26 mcc wrote:Show nested quote +On January 30 2013 02:02 enigmaticcam wrote:On January 30 2013 01:52 mcc wrote:Nope it is not. C# is well designed language, Visual Basic is work of the devil and should have never seen the light of day. Just because something allows you to program the same things as something else does not mean they are equal. Do not mention VB or he will jump out of the wall and eat you  The only thing C#.NET has to offer that VB.NET doesn't is an invitation to the circle jerk of C# users who look down their noses at the rest of us who still use VB. There is no difference between the two. The only advantage that can be argued is that learning C# translates easier to other languages that are similar to C. Yes, I look down on the language as it is example of terrible language design. I do not look down on programmers that work with it, I was forced to work in VB too. There is more to language design than what you can do with a language. I can (theoretically) write in brainfuck what I can in C#, does not mean one is not superior language over the other. That is rather strained comparison, but even in case of languages of similar type some are easily better designed than others. But comparing it with C# is kind of out there, VB was designed as scripting language and has no place in most cases where C# should be used. Problem is if I need to use scripting language I will not pick VB if I can avoid it as there are plenty better choices. Meh, no one's been able to show me exactly why and how C# is better. The only difference between the two is syntax. The fact that there are converters out there that will convert C#.NET to VB.NET and vice versa is strongly suggestive of this.
Edit: From Wikipedia (http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NET)
Though C# and VB.NET are syntactically very different, that is where the differences mostly end. Microsoft developed both of these languages to be part of the same .NET Framework development platform. They are both developed, managed, and supported by the same language development team at Microsoft.[7] They compile to the same intermediate language (IL), which runs against the same .NET Framework runtime libraries.[8] Although there are some differences in the programming constructs (discussed further below), their differences are primarily syntactic and, assuming one avoids the Visual Basic "Compatibility" libraries provided by Microsoft to aid conversion from VB6, almost every command in VB has an equivalent command in C# and vice versa. Lastly, both languages reference the same Base Classes of the .NET Framework to extend their functionality. As a result, with few exceptions, a program written in either language can be run through a simple syntax converter to translate to the other. There are many open source and commercially available products for this purpose.
|
Meh, no one's been able to show me exactly why and how C# is better. The only difference between the two is syntax. The fact that there are converters out there that will convert C#.NET to VB.NET and vice versa is strongly suggestive of this.
Not to fuel the C# vs VB sub-thread, I've always found that conversions between between languages is often a hodgepodge of crappy, unreadable syntax. Though I haven't delved too deeply into the .NET framework, so I can't comment on that particular conversion.
Are there language converters that don't suck, or is my anecdotal evidence actually a representation of the whole?
|
Hyrule19083 Posts
For some reason, even though both are compiled to MSIL, there are differences in the languages that make some conversions impossible. For instance, trying to sort a ListView by any but the first column in VB.Net isn't possible. Doing it in C# is as simple as calling a function called sortColumn (I think). It's beyond me why that's true, but it is (or at least was a few years ago, the last time I used VB.Net).
|
On January 30 2013 03:03 enigmaticcam wrote:Show nested quote +On January 30 2013 02:26 mcc wrote:On January 30 2013 02:02 enigmaticcam wrote:On January 30 2013 01:52 mcc wrote:Nope it is not. C# is well designed language, Visual Basic is work of the devil and should have never seen the light of day. Just because something allows you to program the same things as something else does not mean they are equal. Do not mention VB or he will jump out of the wall and eat you  The only thing C#.NET has to offer that VB.NET doesn't is an invitation to the circle jerk of C# users who look down their noses at the rest of us who still use VB. There is no difference between the two. The only advantage that can be argued is that learning C# translates easier to other languages that are similar to C. Yes, I look down on the language as it is example of terrible language design. I do not look down on programmers that work with it, I was forced to work in VB too. There is more to language design than what you can do with a language. I can (theoretically) write in brainfuck what I can in C#, does not mean one is not superior language over the other. That is rather strained comparison, but even in case of languages of similar type some are easily better designed than others. But comparing it with C# is kind of out there, VB was designed as scripting language and has no place in most cases where C# should be used. Problem is if I need to use scripting language I will not pick VB if I can avoid it as there are plenty better choices. Meh, no one's been able to show me exactly why and how C# is better. The only difference between the two is syntax. The fact that there are converters out there that will convert C#.NET to VB.NET and vice versa is strongly suggestive of this. Edit: From Wikipedia (http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NET) Show nested quote +Though C# and VB.NET are syntactically very different, that is where the differences mostly end. Microsoft developed both of these languages to be part of the same .NET Framework development platform. They are both developed, managed, and supported by the same language development team at Microsoft.[7] They compile to the same intermediate language (IL), which runs against the same .NET Framework runtime libraries.[8] Although there are some differences in the programming constructs (discussed further below), their differences are primarily syntactic and, assuming one avoids the Visual Basic "Compatibility" libraries provided by Microsoft to aid conversion from VB6, almost every command in VB has an equivalent command in C# and vice versa. Lastly, both languages reference the same Base Classes of the .NET Framework to extend their functionality. As a result, with few exceptions, a program written in either language can be run through a simple syntax converter to translate to the other. There are many open source and commercially available products for this purpose. I knew that, but trying to answer you forced me to actually look properly at VB.NET. Seems they actually created more of a new language as they fixed the most glaring nonsense from VB. In that case I move VB.Net from category of bad design, to just ugly. It is too verbose and cumbersome and in general the syntax is just strange/ugly. But all that is somewhat subjective so we do not have to argue about it It still seems to lack some things, like unsafe, but those are just rare cases.
I was more arguing about VB and I will stand by what I said about it
|
|
|
|