PDA

View Full Version : Programming pointers



Meirnon
2013-03-04, 04:11 PM
Hello, playground. I haven't posted here in at least a year, but it's been a busy year. And I always love coming back because there's always such a diversity of intelligence and interests, even if I don't post. But today I'm asking those of you with skills and interests similar to my own but further along for some advice, of which you all have never failed to help me with.

I'm intending to take a 3 month break from "adult life" for the 2nd quarter of this year. During that time, I'm going to be developing my art rigorously with a friend who is further along than I am in skill. And during that time as well, I'm going to spend as much time as I can learning to program with that person. The advice I'm seeking from my fellow playgrounders is: Where should I start? I know that it's detrimental to just pick a programming language and focus on it solely. I have a rusty knowledge of HTML and I can get my computer to say "Hello World" fairly easily. But what resources should I be looking for to start my path to self-education and coding? And do you think it's a worthwhile venture to spend 3 months (and suggesting I can market my art enough to make rent, perhaps longer) towards this? I have the money saved up to make ends meet, but before I start at the end of this month, what should I look for?

Anyways, I'm eager to hear back from the playground.:smalltongue:

Grinner
2013-03-04, 04:29 PM
HTML isn't exactly "real" programming. It's a markup language, meaning it's used for defining data (i.e. a website's layout and content) which can then be interpreted by a host program (an Internet browser).

What really needs to be asked is: "What do you want to accomplish?" Different languages are suited for different tasks, and learning just one will teach you the logical foundations of programming. After that, learning another language consists of picking up the syntax and any quirks associated with the language.

Science Officer
2013-03-04, 10:17 PM
0x3248FA15
0x78D1185C
0xA30B8231
...
Oh, you mean advice?
Codecademy (http://www.codecademy.com/)might be a good place to start. But Grinner has it right: HTML isn't exactly programming, and it would be easier to help you if it was clearer what your goals are.

Meirnon
2013-03-04, 11:44 PM
HTML isn't exactly "real" programming. It's a markup language, meaning it's used for defining data (i.e. a website's layout and content) which can then be interpreted by a host program (an Internet browser).

What really needs to be asked is: "What do you want to accomplish?" Different languages are suited for different tasks, and learning just one will teach you the logical foundations of programming. After that, learning another language consists of picking up the syntax and any quirks associated with the language.

I would like to pick up the basics. Whether that's starting up a self-taught course on C# or Java, doesn't matter. I'm just looking for the resources and pointers to a productive beginning to what I hope will be enough knowledge to expand on whatever I decide to pursue from there, whether freelancing as a codemonkey, picking up a stable job, or just doing recreational application work.

Grinner
2013-03-05, 12:10 AM
I would like to pick up the basics. Whether that's starting up a self-taught course on C# or Java, doesn't matter. I'm just looking for the resources and pointers to a productive beginning to what I hope will be enough knowledge to expand on whatever I decide to pursue from there, whether freelancing as a codemonkey, picking up a stable job, or just doing recreational application work.

I think Python fits your criteria. Because it uses dynamic typing, it lets you focus on the logic of programming without fussing over the minutia. If you decide to go on, you'll have to learn more about how raw data is stored, but you'll at least have a background to work off.

Try these books:
Invent Your Own Computer Games with Python (http://inventwithpython.com/IYOCGwP_book1.pdf)
Think Python (http://greenteapress.com/thinkpython/thinkpython.html)

The first is, as the title would indicate, focused on game programming. It does have a very good introductory section, however, for it tries to ease the reader into programming through a series of exercises.

The second attempts to not only teach Python*, but also the mindset required for programming. It is a bit dry though. Still, once you read the first, it would be wise to go to this one. It goes over some of the formal computer science that the first skips.

*I'm actually not sure what version of Python the second uses. The first teaches 3.1, which is incompatible with 2.x Python code.

nedz
2013-03-05, 06:01 AM
I was expecting a question about C; or possibly Pascal.

Manga Shoggoth
2013-03-05, 09:20 AM
I strongly reccomend finding a programming course or some form of evening class (or at least the help of someone who already knows programming).

Teaching yourself is all very well (that's how I started, after all), but you can learn a lot of bad habits very easily, and they can be quite hard to unlearn.

That said, the first language is always the hardest to learn. Once you have got the hand of one language, the others work in a simillar way.


I think Python fits your criteria. Because it uses dynamic typing, it lets you focus on the logic of programming without fussing over the minutia. If you decide to go on, you'll have to learn more about how raw data is stored, but you'll at least have a background to work off.

I'm not familliar with Python, but I'd advise against this: Understanding datatypes is a core programming skill, and it isn't really all that difficult.

To the best of my knowledge, most programs do not use dynamic typing (although most languages do have at least some facilities for it - C had unions, basic had the good old variant) - to the extent that in 30 years of professional programming (and a handful of years before that) I have seldom seen dynamic typing used. Most of those times were when dealing with spreadsheets.

There may be other reasons to choose Python, but I don't think that's one of them.


EDIT: For a (possibly slightly out of date - i picked it up in 2005...) overview of programming languages, try this site (http://groups.engin.umd.umich.edu/CIS/course.des/cis400/).

factotum
2013-03-05, 09:55 AM
I agree with Manga Shoggoth there--I reckon it's easier to go from a strongly typed language (like C# or Java) to a weakly typed one like Python than vice versa, so learning the stricter language first will probably save you a lot of heartache later on when you come to learn another programming language.

(Not that I can really go from personal experience here, considering I started with the sort of "Street BASIC" you'd find on 1980s home computers and went via assembly language to C--I really wouldn't recommend following that route, for that way lies madness!).

Manga Shoggoth
2013-03-05, 10:15 AM
(Not that I can really go from personal experience here, considering I started with the sort of "Street BASIC" you'd find on 1980s home computers and went via assembly language to C--I really wouldn't recommend following that route, for that way lies madness!).

Like many programmers my age, I did much the same. Except I went Basic -> Z80 Assembler -> Pascal -> Fortran -> COBOL -> C -> PL/1 -> VBA (not to mention the languages embedded in Oracle, Ingres, SQL Server and Sybase).

To the OP: C# or Java (NOTE: NOT JavaScript - they are different things) aren't bad places to start, but may cost you in $$$. Another possibly cheaper alternative if you have an old PC is to install some variant of linux, which will include a C or C++ compiler.

Emmerask
2013-03-05, 10:36 AM
I would say start either with java or c#, both are quite easy to learn, both are exceedingly well documented, both have about a million online tutorials for various stuff.Oh and also important both are actually used widely.

for c# though you pretty much need visual studio (maybe there is someother ide I donīt know about?) and you pretty much canīt work with the free version because really its only marginally better then using a texteditor.

On the other hand java has a ton of free and feature complete ides, eclipse, intellij, netbeans which all are great to develop with.

Grinner
2013-03-05, 10:52 AM
I strongly reccomend finding a programming course or some form of evening class (or at least the help of someone who already knows programming).

Teaching yourself is all very well (that's how I started, after all), but you can learn a lot of bad habits very easily, and they can be quite hard to unlearn.

That said, the first language is always the hardest to learn. Once you have got the hand of one language, the others work in a simillar way.

Emphasis mine.

That's actually one of the reasons why I suggested Python. I'm only learning it now, but from what I've seen, its syntax enforces whitespace usage and encourages good style.

I'll second the evening classes though, if you can afford them, Meirnon.


I'm not familliar with Python, but I'd advise against this: Understanding datatypes is a core programming skill, and it isn't really all that difficult.

To the best of my knowledge, most programs do not use dynamic typing (although most languages do have at least some facilities for it - C had unions, basic had the good old variant) - to the extent that in 30 years of professional programming (and a handful of years before that) I have seldom seen dynamic typing used. Most of those times were when dealing with spreadsheets.

There may be other reasons to choose Python, but I don't think that's one of them.

He did mention having only three months though, and I remember getting really hung up on the concept of strings when I was learning C. Also, remembering how much space each datatype required was a pain. Python might not be the most powerful language in respect to raw data, but there is a timeframe to consider as well.

Manga Shoggoth
2013-03-05, 11:15 AM
That's actually one of the reasons why I suggested Python. I'm only learning it now, but from what I've seen, its syntax enforces whitespace usage and encourages good style..

One of the (many) mantras in programming is "There is not now, nor has there ever been, nor will there ever be, any programming language in which it is the least bit difficult to write bad code".

Back in the day, VAX VMS had the Language Sensitive Editor, which was supposed to help eliminate a lot of coding problems, including those based on style. It wasn't very popular.

Some of the more recent programming tools try to so simillar things. I can't speak for their effectiveness, though.


...I remember getting really hung up on the concept of strings when I was learning C.

I don't blame you. String handling in C is one of the language's weaker points - Null terminated strings allied with poor (or non-existant) bounds checking caused me much delight over the years. And C really isn't a beginners language to start with.

The Joel on Software blog had quite an amusing (and very educational) rant about it. I'll see if I can find the link tonight.

That said, I didn't have too many problems with it, but then I had gone via assembler language, where you had to write your own string handling.


EDIT: The Joel on Software article is Back to Basics (http://www.joelonsoftware.com/articles/fog0000000319.html). Joel writes a lot of good articles - the site is worth an extended visit.

factotum
2013-03-05, 11:52 AM
C#, though, is nothing like C--it has sensible string handling, for a start. I wouldn't recommend any beginner setting out in programming goes near C, but C# would work OK. (Oh, and the freebie version that ships as part of the Express Edition of Visual Studio is perfectly functional; if, for some reason, you hate Microsoft so much that you never want to use their products, there are open source C# editors and compilers).

Emmerask
2013-03-05, 01:37 PM
C#, though, is nothing like C--it has sensible string handling, for a start. I wouldn't recommend any beginner setting out in programming goes near C, but C# would work OK. (Oh, and the freebie version that ships as part of the Express Edition of Visual Studio is perfectly functional; if, for some reason, you hate Microsoft so much that you never want to use their products, there are open source C# editors and compilers).


Its been a long while since I last did some c# but from what I remember the visual studio express (free) version didnīt have code completion or auto generating stuff (like getters setters, listeners etc).
And there was one other thing I missed very much but I just canīt remember :-/

If the newer versions of visual studio express have all these in my opinion essential functionalities for fast coding then scratch what I said above against c# for a beginner.
Because c# itself is a very good language and does a lot of things better then java does (ui stuff mostly, swing is pretty much made to torture humanity :smallwink:)

akma
2013-03-05, 02:16 PM
Maybe you should try to utilise your HTML knoweledge and learn javascript? The downside is that it`s only good for web development, and I don`t know if it`s a beginner friendly leanguage or not.

factotum
2013-03-06, 02:23 AM
Its been a long while since I last did some c# but from what I remember the visual studio express (free) version didnīt have code completion or auto generating stuff (like getters setters, listeners etc).

By getters and setters, do you mean the

public int number { get; set; }

syntax? Because that definitely works in Visual C# 2010 Express. It definitely has auto-complete of code, as well, because I always find it annoying when it keeps suggesting what it thinks I meant to type next... :smallamused:

Meirnon
2013-03-06, 03:50 AM
Thanks for all the replies! Yes, I'm hoping to go for as much freebie open-source stuff I can get. I'm a 20 year old who gets a stipend of $100/mo for coaching debate (and sending a kid to nationals this year-- HOLLA!) and a $125/wk paycheck from a part-time job. I honestly don't have enough time for any sort of classes, nor the money.

As for the 3 month time-limit, that's worst-case after I take time off from work. Worst-case being I have 3 months of 16-hour days I can spend on learning better art and coding, with another individual/codebuddy who is much more driven than I am (which will make it easy for me to keep up since it'll be a competition :smallwink:.) Best case scenario is that I might actually have art presentable enough towards the end that I can pay my share of rent with commissions!

I looked into Python, it seems interesting, but I think learning C# may be a better place to start from what I've heard here. Something was said about open-source compilers for it? I don't want to spend too much money.

factotum
2013-03-06, 05:35 AM
You can just get Visual C# Express Edition from Microsoft for the total price of nothing--I only mentioned open source on the grounds you might have some sort of hatred of Microsoft going, or else be running Linux (for which you'd need the open source Mono environment to be doing C#/.NET stuff).

Manga Shoggoth
2013-03-06, 07:59 AM
... with another individual/codebuddy who is much more driven than I am (which will make it easy for me to keep up since it'll be a competition :smallwink:.)...

Well, it sounds as if c# Express will give you what you want. In which case I can do no better than wish you good luck. Even if you don't start doing it professionally, programming is still a lot of fun.

As you said, specialising in one language is not a good idea if you want to go professional, but subsequent languages will be a lot easier to learn once the first is under your belt. Just look around at the job ads to see what is in demand, and go from there.

However, if you intend to try and code for a living, I must repeat my earlier warning: Teaching yourself is all very well, but you can learn a lot of bad habits very easily, and they can be quite hard to unlearn. Learning together with an inexperienced friend may well be fun, but it also means you can learn bad habits together too.

Also remember that there is a huge difference between "being able to write code" and "being a Programmer". It's a bit like the difference between "being able to mow the lawn" and "being a Gardener". Except with less fresh air.

As well as looking at programming books, I suggest that you also chase up things like program style, testing and design methods. In other words, learning how to program, not just how to stick code together.

Most employers will give appropriate training if you are starting out as a junior programmer - each company has their own way of doing things. (Freelancers usually have to plough their own furrow...).

I'm not trying to discourage you - quite the opposite, in fact - but I have seen too many people take the "I'll learn to code and get a job/make a fortune" route, and then find out that there was a very steep learning curve they weren't expecting. And the pay wasn't as brilliant as they thought.

Again, good luck.

Grinner
2013-03-06, 02:50 PM
Fun fact: While C# Express is still probably the way to go, the .NET runtimes all include a copy of the commandline C# compiler.


EDIT: The Joel on Software article is Back to Basics (http://www.joelonsoftware.com/articles/fog0000000319.html). Joel writes a lot of good articles - the site is worth an extended visit.

Good article. Thanks for sharing. :smallsmile:

Wookieetank
2013-03-07, 12:11 PM
For free classes on programming (C and python) there's https://www.edx.org/. There's a couple of other places offering free online courses, just don't remember them off the top of my head.

Grindle
2013-03-07, 06:40 PM
I have to say, I disagree with most of the people in this thread. I taught myself to program starting with Python, and it served me perfectly well. I had to learn about data types/pointers when learning languages like C and C++, but that was a lot easier than learning the basics of good programming. Python is a good language for beginners, because it allows them to actually learn important programming concepts and actually do things (it has a very comprehensive standard library and readable syntax) without dealing with the hassle of language-specific compiling/packaging that languages that Java and C# have, and without the pain of things like C-string handling.

I would also like to point out that while C# has been open-sourced, the Mono framework depends on certain Windows libraries to operate, and the FSF has advised people against using it.

Edit: Python's interactive command line is also great for beginners.

FreakyCheeseMan
2013-03-07, 06:57 PM
On the language to start with, I would recommend either Java or Python, depending on how good you are at sticking with things. If you're pretty certain that you're going to take to programming, go with Java, as it will teach you good habits and make sure that you understand important concepts like typing.

However, if you're worried about learning at all, go with Python; it's a lot easier and more accessible. You'll become a better programmer through Java, but you're more likely to become a programmer at all through Python.

I might recommend the "Head First Java" books; they're cheesy and annoying, but they get their point across. I'm not as familiar with the basic one, but their work on Design Patterns is excellent, and a subject every coder should become familiar with.

Grindle
2013-03-07, 07:03 PM
If you're pretty certain that you're going to take to programming, go with Java, as it will teach you good habits and make sure that you understand important concepts like typing.

No programming language will teach you good habits. Only good teachers/books/experience will teach you good habits. And I would like to say that typing, while an important concept, is easy to learn. I don't consider it a good reason to choose a language.

FreakyCheeseMan
2013-03-07, 07:08 PM
No programming language will teach you good habits. Only good teachers/books/experience will teach you good habits. And I would like to say that typing, while an important concept, is easy to learn. I don't consider it a good reason to choose a language.

I completely disagree; my background in Java meant that I had to learn to do things in a fairly strict and well-defined manner, rather than taking easy shortcuts. As the size of my projects increased, the habits from Java let me stay on top of them; if I'd learned in Python, I would had to go back through and teach myself that discipline the hard way, rather than learning it as first nature.

Grindle
2013-03-07, 07:46 PM
I completely disagree; my background in Java meant that I had to learn to do things in a fairly strict and well-defined manner, rather than taking easy shortcuts. As the size of my projects increased, the habits from Java let me stay on top of them; if I'd learned in Python, I would had to go back through and teach myself that discipline the hard way, rather than learning it as first nature.

According to your reasoning, all Java programmers are good programmers, and all Python programmers are undisciplined, and I really don't think that's true.

Also, what are you even talking about? Java makes you put everything in classes, has strong typing, makes you declare things with exceptions, and has interfaces, but none of those necessarily lead to good programs. In my experience, they're mostly a major hassle (I prefer duck typing, and think classes are overused).

FreakyCheeseMan
2013-03-07, 07:52 PM
According to your reasoning, all Java programmers are good programmers, and all Python programmers are undisciplined, and I really don't think that's true.

Also, what are you even talking about? Java makes you put everything in classes, has strong typing, makes you declare things with exceptions, and has interfaces, but none of those necessarily lead to good programs. In my experience, they're mostly a major hassle (I prefer duck typing, and think classes are overused).

...that doesn't follow from my reasoning at all. I said that Java helps; it certainly isn't the only factor involved. I still could have become a good programmer from Python, but it would have meant going back and re-learning a lot of my most basic habits.

I can only speak to my own experience, which has been that the more rigid rules of java meant that, very early on, I had to get into the habit of planning ahead and considering the placement of individual components in the larger scheme of things.

Grindle
2013-03-07, 08:01 PM
...that doesn't follow from my reasoning at all. I said that Java helps; it certainly isn't the only factor involved. I still could have become a good programmer from Python, but it would have meant going back and re-learning a lot of my most basic habits.

I can only speak to my own experience, which has been that the more rigid rules of java meant that, very early on, I had to get into the habit of planning ahead and considering the placement of individual components in the larger scheme of things.

You appeared to be saying that anyone who only knew Java would be a good programmer, while someone who only knew Python wouldn't be. That's what I was talking about.

I learned Python first, and I certainly didn't have to relearn any "basic habits". I don't know where you got the idea that someone who learned Python as a first language would.

The "rigid rules" of Java do not necessarily lead to good program structure: you can write a bad program in any language, and as I said in my last post, I don't see how Java leads to better programs. And if you're only judging from your own experience, how do you know that you would have to relearn "basic habits" if you had started with Python instead?

FreakyCheeseMan
2013-03-07, 08:25 PM
You appeared to be saying that anyone who only knew Java would be a good programmer, while someone who only knew Python wouldn't be. That's what I was talking about.

All I said was that the early habits I learned from Java helped me as a programmer. That doesn't imply that "Only people who learned in java make good programmers" any more than "Having a good first teacher helps" implies that "Only people with good first teachers become good programmers."


I learned Python first, and I certainly didn't have to relearn any "basic habits". I don't know where you got the idea that someone who learned Python as a first language would.

The "rigid rules" of Java do not necessarily lead to good program structure: you can write a bad program in any language, and as I said in my last post, I don't see how Java leads to better programs.

You can write bad programs in any language, but that doesn't mean that the syntax of a specific language can't serve to encourage or discourage specific habits. You seem to be implying that anything that isn't absolute is irrelevant, which is simply not the case.


And if you're only judging from your own experience, how do you know that you would have to relearn "basic habits" if you had started with Python instead?

Because a lot of those rules annoyed me at the time; for the simpler programs I was writing early-on, it would have been faster and easier to take shortcuts and break a lot of the rigid rules that Java holds in place. As I moved on to larger and more complicated projects, I found myself becoming grateful that I'd had to develop those habits, because they let me write larger and more structured programs without losing myself in the complexity of my own creations.

As for the actual validity of those habits, that's another debate entirely. My own experience has been that the stricter structures encouraged by java served to keep my code modular, expandable and consistent in its design; this was also the view presented by my teachers and professors.

Flickerdart
2013-03-07, 08:25 PM
I would recommend Processing, especially to an artist. It's basically a Java library focused on visualizations rather than building programs from scratch, so you get to skip the boring "this is how you make a window appear" stuff and can jump right into making cool stuff happen. All the important stuff (loops, variables and scope, methods, objects) is still there, so once you have a handle on how it all comes together, you can move on to 'real' Java if you so choose.

Grindle
2013-03-07, 09:48 PM
All I said was that the early habits I learned from Java helped me as a programmer. That doesn't imply that "Only people who learned in java make good programmers" any more than "Having a good first teacher helps" implies that "Only people with good first teachers become good programmers."

You can write bad programs in any language, but that doesn't mean that the syntax of a specific language can't serve to encourage or discourage specific habits. You seem to be implying that anything that isn't absolute is irrelevant, which is simply not the case.

Because a lot of those rules annoyed me at the time; for the simpler programs I was writing early-on, it would have been faster and easier to take shortcuts and break a lot of the rigid rules that Java holds in place. As I moved on to larger and more complicated projects, I found myself becoming grateful that I'd had to develop those habits, because they let me write larger and more structured programs without losing myself in the complexity of my own creations.

As for the actual validity of those habits, that's another debate entirely. My own experience has been that the stricter structures encouraged by java served to keep my code modular, expandable and consistent in its design; this was also the view presented by my teachers and professors.

You seem to be suggesting, and appear to have suggested throughout, that people that learned Python as a first language have somehow made a mistake, and will have to at some point relearn basic programming lessons. I find this idea objectionable.

Python also has complete support for packages, modularity, inheritance, consistency, and expandability, which you seem to be implying only the Java model of design really supports. It hardcodes less into the language standard, which I think is a good thing (it makes Python easier to learn and easier to implement).

Sure, I think the syntax of a language can discourage specific bad habits; I don't where you got that idea about the whole "anything that isn't absolute is irrelevant" comment. But I don't think discouraging specific bad habits is going to make someone a good programmer, anymore than correcting grammatical errors is going to make someone a good writer.

Also, Python's syntax rules specifically prevent certain bad habits. (For example, you can't use "=" in "if" statements, a cause of many bugs in C-style languages.) And in general, the Python community has a strong idea of what is and what isn't good code (using the term "pythonic" and based on "The Zen of Python"), and has a definite idea of what constitutes good design. So it's not like Java is the only language that does things to prevent bad habits.

FreakyCheeseMan
2013-03-07, 10:04 PM
Sure, I think the syntax of a language can discourage specific bad habits; I don't where you got that idea about the whole "anything that isn't absolute is irrelevant" comment. But I don't think discouraging specific bad habits is going to make someone a good programmer, anymore than correcting grammatical errors is going to make someone a good writer.

That last line by itself strikes me as showing the "anything that isn't absolute is irrelevant" mentality; correcting grammatical errors does, in fact, make a person a better writer (assuming they take the corrections to heart.) It is neither necessary nor sufficient, but it's not irrelevant, either.

To me, enforcing those small habits helps to build an an attitude and framework that supports the programmer in larger projects (regardless of what language those projects are in.) There's no reason someone learning in Python couldn't pick them up as well, but with Java, it's almost guaranteed by the language.


Also, Python's syntax rules specifically prevent certain bad habits. (For example, you can't use "=" in "if" statements, a cause of many bugs in C-style languages.) And in general, the Python community has a strong idea of what is and what isn't good code (using the term "pythonic" and based on "The Zen of Python"), and has a definite idea of what constitutes good design. So it's not like Java is the only language that does things to prevent bad habits.

Python has examples of syntax supporting good practices as well - enforcing white space, chief among them - but it strikes me as having fewer of them than Java, and in less significant places.

I have nothing but respect for the Python community, and I never said that Python was a bad language; I just said that, as a learning language, Java promotes more discipline and good coding habits. To me, it almost comes down to philosophy - the philosophy of the Python community has always seemed to be "This is what you should do, but you should do it because you're a good programmer, not because the language forces you to." That's a philosophy I respect and share, and it's great for experienced programmers, but I think that sometimes beginners need more hard-and-fast structure, at least until they have enough experience to understand the more abstract concepts and reasons behind it.

Grindle
2013-03-07, 10:10 PM
That last line by itself strikes me as showing the "anything that isn't absolute is irrelevant" mentality; correcting grammatical errors does, in fact, make a person a better writer (assuming they take the corrections to heart.) It is neither necessary nor sufficient, but it's not irrelevant, either.



It is absolutely not that "mentality". I said a "good writer", not a "better writer". Those mean completely different things. What I mean is that even if your writing has no errors, it isn't necessarily any good.

FreakyCheeseMan
2013-03-07, 10:12 PM
It is absolutely not that "mentality". I said a "good writer", not a "better writer". Those mean completely different things. What I mean is that even if your writing has no errors, it isn't necessarily any good.

...but making someone a "Better Programmer" is still a net benefit, even if it's not the same as making them a "Good Programmer." So, in the context of the original argument, syntactical rules that enforce good habits make a good learning language, because they make "Better Programmers", even though, obviously, more is required to make Good ones.

Grindle
2013-03-07, 10:16 PM
...but making someone a "Better Programmer" is still a net benefit, even if it's not the same as making them a "Good Programmer." So, in the context of the original argument, syntactical rules that enforce good habits make a good learning language, because they make "Better Programmers", even though, obviously, more is required to make Good ones.

My original point, which you seem to have missed, was that Java will not make you a good programmer.

I understand your overall argument, but I disagree that forcing people to learn the "right way" to do things in a rigid environment is better than allowing them to learn through experience in a more flexible one.

Edit: Will you please stop accusing me of being an absolutist? I'm not, and it's not a good method of arguing (I would prefer to talk about the points in dispute, rather than the people involved).

FreakyCheeseMan
2013-03-07, 10:24 PM
My original point, which you seem to have missed, was that Java will not make you a good programmer.

I understand your overall argument, but I disagree that forcing people to learn the "right way" to do things in a rigid environment is better than allowing them to learn through experience in a more flexible one.

...once again, you're acting as if anything that isn't absolute doesn't matter. Java will not absolutely "make" you a good programmer, but it may help you to become a better one, which is all that's required for Java to be a good learning language. You could just as easily say that offering computer classes in high school is a waste of money, because simply having the classes available will not "make" students become good at programming.

I can see the arguments for both - if you look back to my first comment, I said that it depended on the student. Python is certainly easier to learn in, and more fun; for most students, I'd actually recommend it, because it makes it more likely that they will become interested in programming, which is by far the most useful thing a first language can do. On the other hand, if you have the kind of obsessive student who is going to love programming no matter how difficult the tool, I think that Java is a better fit, as it will help promote the habits discussed previously.

Grindle
2013-03-07, 10:31 PM
Will you please stop accusing me of being an absolutist? I'm not, and it's not a good method of arguing (I would prefer to talk about the points in dispute, rather than the people involved).

I was simply arguing that Java will not make you a good programmer because you seemed to be suggesting early on that it would. It has nothing to do with a belief on my part of the uselessness of trying anything that isn't extremely effective, or whatever crazy belief you're attributing to me.

Edit: Anyway, since we're sort of close to agreeing on the actual points under dispute, I'm probably done with this argument.

FreakyCheeseMan
2013-03-07, 10:38 PM
Will you please stop accusing me of being an absolutist? I'm not, and it's not a good method of arguing (I would prefer to talk about the points in dispute, rather than the people involved).

I was simply arguing that Java will not make you a good programmer because you seemed to be suggesting early on that it would. It has nothing to do with a belief on my part of the uselessness of trying anything that isn't extremely effective, or whatever crazy belief you're attributing to me.

Alright; I don't see where I made any arguments that Java by itself would make someone a good programmer, but if it came across that way, apologies. I only brought up the absolutist thing because it seemed like you were stuck on that point - that Java would not make someone a Good programmer - when all I was trying to argue was that it would make them a better one.

...I think this argument passed the Argument Event Horizon of Silliness a while ago, actually.

AttilaTheGeek
2013-03-07, 10:44 PM
I just saw the thread title and had to jump in to link this (http://xkcd.com/138/).

SharpWolf
2013-03-07, 11:14 PM
Personally, considering the time you have and all that, I would say: it depends. If you're looking for professional experience, I would recommend looking at Java (using, say, Eclipse) or C#. In my experience they're a good middle ground to start understanding the bigger concepts without having to go all the way and understand every small peculiarities of the machine, like with C or C++.

If you're looking for something lighter (for example: if you wanted to try making small games and visual experiments first rather than working with data structures and concepts), Python seems like it could be a good choice. ActionScript could be an alternative too (though using Flex is a bit more complicated than Flash, if you don't have the latter). You could also try your hand at doing a bit of modding for a video game you like.

Either way, I would highly support the idea of taking some kind of programming course. The language you use is not as important as a solid understanding of the fundamental concepts, most of all algorithmics (which is to say: it's not the language, it's in how you use it). Programming is all about structuring the way you think and then translating it for the machine, after all.

Finally, depending on how you decide to go at it, I recommend giving these websites a look:

http://docs.oracle.com/javase/tutorial/
http://www.csharp-station.com/Tutorial.aspx
http://docs.python.org/2/tutorial/
http://www.w3schools.com/

It might seem a bit overwhelming at first, but they're decent references and will help you get started.

Have fun! :smallwink:

Jenfrag
2013-03-08, 12:00 AM
Well, it sounds as if c# Express will give you what you want. In which case I can do no better than wish you good luck. Even if you don't start doing it professionally, programming is still a lot of fun.


Absolutely,fun to its true meaning of the word. Besides,you can learn it all in time. Good luck on your gallery. :)

Synovia
2013-03-08, 06:00 PM
for c# though you pretty much need visual studio (maybe there is someother ide I donīt know about?) and you pretty much canīt work with the free version because really its only marginally better then using a texteditor.



There's a lot of things Microsoft does poorly, but building programming tools is not one of them. The entire visual studio line (even the free ones) is fantastic.

C# Express is a fully featured IDE, and a very good one. It has some issues when dealing with source control and multiple users and such (that don't exist in the professional product), but you'll never run into those using it yourself.

Synovia
2013-03-08, 06:12 PM
Will you please stop accusing me of being an absolutist? I'm not, and it's not a good method of arguing (I would prefer to talk about the points in dispute, rather than the people involved)..

If you want to stop being called an absolutist, you need to stop interpreting everyone's statements as being absolute.

What he's saying is completely true: Learning in heavily structured, strongly typed languages makes you more conscious of typing and structure, and makes you less likely to run into issues with those down the road.

Learning in languages that are strongly Object Oriented (like Java and C#) teaches you how to properly encapsulate code, and how to properly structure things.

That doesn't mean that someone who starts on a language that has none of these things can't learn them, it just means its harder. And some of that is because the weakly typed/structured language allows them to do things that are dangerous/sloppy, and you have to unlearn those things.


its kind of like learning to drive on a stick, vs learning to drive on an automatic. The stick is a bit harder, but you gain a better understanding of how the various systems of the car work together. It doesn't mean that people who start on an automatic can't learn stick, its just harder for them, because they have to unlearn things.

Grindle
2013-03-08, 11:46 PM
If you want to stop being called an absolutist, you need to stop interpreting everyone's statements as being absolute.

What he's saying is completely true: Learning in heavily structured, strongly typed languages makes you more conscious of typing and structure, and makes you less likely to run into issues with those down the road.

Learning in languages that are strongly Object Oriented (like Java and C#) teaches you how to properly encapsulate code, and how to properly structure things.

That doesn't mean that someone who starts on a language that has none of these things can't learn them, it just means its harder. And some of that is because the weakly typed/structured language allows them to do things that are dangerous/sloppy, and you have to unlearn those things.

its kind of like learning to drive on a stick, vs learning to drive on an automatic. The stick is a bit harder, but you gain a better understanding of how the various systems of the car work together. It doesn't mean that people who start on an automatic can't learn stick, its just harder for them, because they have to unlearn things.

Contrary to your apparent assumption, Python, the language I am arguing in favor of, is strongly-typed (look it up). And in formal terms, "weakly structured" means nothing. Python supports object-oriented programming, good structure, and proper encapsulation as well as Java or C#, and your car metaphor is inherently flawed because it disingenuously suggests that Python is capable of less fine-grained control than the other languages mentioned. Also, your (unfortunately widely-shared) apparent assumption that object-oriented programming is the only way to have "proper" encapsulation and "proper" structure bothers me.

I do not know of anything that Python allows a programmer to do that is particularly dangerous or sloppy related to its more flexible program structure.

Someone implied that learning Java would make you a better programmer; I thought they were saying that it alone would make you a good programmer. I said that it alone wouldn't make you a good programmer, and they thought I was saying that learning it wouldn't make you a better programmer, and accused me of being an absolutist. They then proceeded to accuse other statement I made of absolutism, apparently now convinced they had learned my true nature. I feel that this discussion has dissolved into attacks on my character and my statements, and I refuse to participate further.

Meirnon
2013-03-09, 06:12 AM
I'm sure all of this back and forth over which programming language is best is all in good nature *ahem*, but it doesn't really do a whole lot for me. I've got approximately 2 weeks to figure out what resources I'm looking for, and I'm leaning towards C#. Also very glad people are making pointers jokes. :D

Recaiden
2013-03-09, 11:35 AM
My recommendation is to learn more than one language, and make them different. C# is good, because it gives most of the same benefits as Java without having to fight the language every step of the way, and the support of C# Express is very nice. But having learned nothing but Java to start with, I had some trouble when it came to doing real programming because I was so used to it and it alone.
Consider looking into F# as well?

And I'm just going to leave this here: Learn Python The Hard Way (http://learnpythonthehardway.org/)

lesser_minion
2013-03-09, 11:51 AM
I don't think you can take a single language, learn it, and come out of the experience a good programmer -- or even a particularly useful one. You need to expose yourself to more than one way of doing things, and learn for yourself what the advantages and disadvantages are of each.

You should consider avoiding C++ and PHP. They're both valid bullet points on a CV, and people have pulled off some pretty impressive stuff in both, but they're still some of the most deeply flawed programming languages out there.

peterpaulrubens
2013-03-09, 12:38 PM
My $.02: learn JavaScript. You can do an awful lot of things with Javascript on the browser, especially with libraries like JQuery etc., and with NodeJS (http://nodejs.org/) you can make server-side/command-line apps as well. And it's portable across Windows, Linux, Mac, as well as more obscure platforms. Javascript is easily the most widely-used programming language because of its use in dynamic web pages.

I wouldn't bother with static-typed languages like C# or Java. Their benefit lies primarily in that large groups of people can change individual parts of a very large codebase without unknowingly trashing other areas of the code. When you change the type of something, you either catch every instance of it, or your project doesn't compile. That's useful to large teams (i.e. "enterprise" teams) but isn't necessarily useful to you quite so much.

I've been a programmer for 14 years now, including Visual Basic, Perl and C#, and I'm in the process of moving my company's intranet infrastructure over to NodeJS. Its one-size-fits-all nature really is that cool. However the heavily asynchronous nature can be challenging to grasp at first, so I would recommend you start with some browser-side programming with JQuery (http://jquery.org).