Hacker News new | past | comments | ask | show | jobs | submit | reesdreesd's comments login

Agreed.


Exactly. And those who don't stay often become ambassadors for German culture, language, interests, etc.


Also, plenty of foreign students receive financial aid in the US. Somebody's paying for that, too.

The Germans choose to make tuition free for all students, including foreigners. Where's the problem?


According to the BBC article cited in the post, 50% of foreign students wind up staying in Germany. Germany suffers a fair amount of brain drain to the US. They're more than happy to have some of our more enterprising students by way of compensation. Certainly, there would be a financing issue if huge numbers of Americans head over for a free ride, but we're a long way from that point.


Why do you hate using Python for production tasks?


In my experience/opinion: get over a certain number of lines of code and the type system starts getting in the way rather than getting out of the way. This number is not obvious and is very easy to pass without realizing it until it's too late.


Hey, not arguing, just curious, do you have some examples of times where the type system has gotten in the way? And what languages you prefer to use for production systems that don't have those problems?


Simple example: Say you're working with an external library. And say you need to work with this function:

    def convert_to_int(val):
        ....
What type should val be? Do you pass the object, or a string representation of the object, or...?

The problem with Python - and non-statically-typed languages in general - is that function signatures don't need to be defined upfront, which leaves it up to the programmer to figure out the inner workings of the functions. This is a huge pain point when working with other people's code.

Python 3 introduced function annotations, which is great. But again, the problem here is that function annotations are opt-in. It's still up to the developer to add the annotations.


I can't give concrete examples because it's closed source code. But my personal biggest issue is class inheritance. It just becomes a complete mess. Very difficult to find what is set where, what is overridden where, what gets called where.

I know I'm going to get some crap for this, but for big prod systems I prefer C++.


Blackthorn is spot on. It's not enough to just "upvote" it.


I really appreciate the feedback. JavaScript is supposed to be complicated. Let's say I study 20 hours a week for three months. Can I get off the ground with it?


JavaScript is kind of ugly in some ways, but not really complicated. You could easily pick up the basics in that time frame.

I've heard people say good things about this book:

http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockfor...

But I've never read it myself.


That's encouraging. Thanks for the reference.


Having taught javascript to coworkers who were proficient in other languages (c++, c#, ect), javascript was confusing to them since many things act differently in javascript from other languages. That said, with the availability of online help and tutorials, you could definitely get off the ground with it, but it will give you a very different experience than something like python. Depends if you are more interested in programming fundamentals or in web programmings. If you are looking for fundamentals, I would learn Python or Java.


Sounds good.


in response to qzcx's reply, it's true. If you want fundamentals then something like Java, Python, or C, C++.

JavaScript really is the way to go to get your feet wet just because it'll give you the experience to build a wide range of platforms such as: Mobile (Cordova, Appcelerator, React Native), Desktop (AngularJS, RequireJS, Dojo, jQuery, Vanilla JavaScript/ECMAScript 6), and Server Side (NodeJS - basically you don't need to learn a front end and back end language).

But still, you should definitely learn one of the more traditional languages at some point in time, especially if you're doing this for a living.

And I would recommend just figuring out something you want to build and just build it. Focus on building and everything will start coming together. You should definitely study, but studying alone will not get you anywhere unless you apply it. And if you're planning on doing this for a living, nothing beats being able to show potential employers your previous projects.

As for your plan, that's definitely enough time. You will definitely get somewhere with it!


I've had the same thought myself. However, I'm willing to take the risk. Besides, one thing leads to another.


This is not to say that learning one language is a waste of time when you then proceed to another language. But, learning one language isn't learning how to code, any moreso than learning how to punch is the same as learning karate -- you haven't begun learning karate until you have the basics of a wide variety of punches, kicks, and blocks; in the same way, you haven't begun to learn programming until you know the basics of a wide variety of languages and techniques.

At best, stopping at your first language will give you a false sense of competence that will lead you into making poor decisions.

By all means, learn a first programming language. But, which you choose doesn't much matter, because you'll need to learn a second and a third before you start to understand what it's all about.


You don't know 'true' mathematics until you study 18th century books in German ... I sense some sort of logical fallacy here.

If you can work with frameworks, write loops, classes, know inheritance, side-effects, polymorphism etc but don't know functional programming, then you're still a programmer in my eyes.

It's a scale imo, everything is relative.


Being a programmer implies a kind of mastery over the concepts, of the type that you only get with experience. You only get that experience by having experience with a variety of tools.

Knowing how to use a hammer doesn't make you an engineer. Knowing calculus doesn't make you a mathematician. Knowing how to make a fist doesn't mean you know karate. Knowing C doesn't make you a programmer. Instead, to be any of these things in any meaningful way, you need mastery of a whole constellation of related tools and techniques and ways of thinking, as well as the practice and experience to make them work together.

You can do a lot of things with a hammer, just as you can do a lot of things with any given programming language -- both are very useful general-purpose tools. A programmer should understand the hammers of the programming world (C), the flathead screwdrivers of the programming world (python), the phillips head screwdrivers of the programming world (SQL), the power jigsaws of the programming world (prolog), the needlenose vice-grips of the programming world (awk), and even some of the nylon jeweler's mallets of the programming world (erlang, haskell, befunge) in the same way that you would expect even a relatively mediocre mechanic to recognize and understand the use of all these tools.

A language is a single tool. Concepts are concepts, and you can apply concepts with inappropriate tools just fine (you can write object-oriented code in c or functional code in java the same way you can remove a bolt with vice grips or hammer in a nail with the handle of a chainsaw).


Thank you for the detailed reply! A number of comments here favor Python for ease of entry and utility.

Do I understand correctly that Java is important, but with a much steeper learning curve?


Java is widespread. Whether it's important or not depends on the project. It's not so much that Java has a steep learning curve, it's that Java has the Java way of doing things (namely, object-oriented programming taken to the extreme) and you are required to do things that way. It's less flexible than Python in the way you can write your code. You have to have a firm grasp of object-oriented programming to do anything in Java. There's a lot of theory you have to learn just to get started, which in Python can just be brushed aside until you're ready to tackle it.

And with Java, you're probably going to need a heavyweight IDE instead of just being able to use a plain text editor or a REPL or other interactive environment (which Java doesn't have).


Yeah, that is right (though some will have a hard time agreeing because your definition isn't very conclusive/complete)

Job wise: if you only had one language (and did not have history as a programmer) I think it would be easiest to find employment using Javascript. The need is huge and growing all the time.

Python or Ruby are pretty easy to learn and can be used for a number of different ways.

If you had plenty of time (read money) then Java would be the best choice. Java easily has ten times the amount of jobs available, so you can imply that it's more useful if you want to accept that metric.


Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: