Python has perpetual scope confusion. As far as I can tell, this is because van Rossum didn’t understand lexical scope initially, so he got it wrong. (This isn’t a problem unique to Python. It seems pretty common among early versions of scripting languages.) Originally, Python was dynamically scoped, which everyone but RMS agrees is wrong. Then they did away with the dynamic scope, but made it so that inner scopes couldn’t even see variables from outer scopes, which is bizarre in a supposedly block-structured language. Now inner scopes can see outer scopes but can’t mutate them, which is bizarre in a supposedly object-oriented language. Some may claim this is a feature, but it’s an accident of implementation. I’m sure when he fixes that, he’ll break something else.
David Parnas invented information hiding more than three decades ago, but it’s “unPythonic,” so Python is missing probably the biggest advance in programming since FORTRAN 2.
breaks alpha-equivalence — that is, you can’t arbitrarily change the names of variables, because some variable occurrences can hide in strings, which makes the binding structure of Python undecidable.
Python is untyped, which means that a whole bunch of errors that are easily detected ahead of time aren’t detected in Python until they happen. Some people like it that way — and more power to them! — but it’s always worth considering whether it’s a misfeature for your particular application
Syntactic whitespace can be nice, but it makes code generation harder than it has to be. This isn’t a difficult problem to solve. Haskell lets you use either syntactic whitespace or an equivalent syntax involving curly braces and semicolons. One is good for people and the other for metaprogramming, and there’s no good reason not to support both. It doesn’t help that when people have requested this, Python’s implementors have been really snotty about it. (Try
Limiting the bodies of
s to be expressions rather than statements is arbitrary and annoying. That variable declarations and assignments are statements rather than expressions is arbitrary and annoying. The statement/expression distinction is arbitrary and annoying.
“The [hash table] is a stark data structure.” Python, like the other table-based languages, encourages you to use “mappings” for many things where sum-of-products (algebraic) datatypes would be more appropriate. This is inefficient, but more importantly, it’s error-prone. To continue quoting Perlis, “Programmers are not to be measured by their ingenuity and their logic but by the completeness of their case analysis.” Python’s lack of support for appropriate data structures encourages program structure that hides case analysis.
All that said, I’d still rather work with Python than PHP or C++. But that’s like saying I’d rather eat Jack in the Box than McDonald’s. It might be slightly more palatable, but it’s still pretty bad.
I’ve been spending 6-8 hours/day teaching myself to program for the past month or so and have basically scoured the Internet for every free or semi-free tutorial out there.
Here’s the good stuff I’ve used and recommend:
Google’s Python Class — Unlike above, requires some set-up on your machine (i.e. you’re not coding in-browser), but still good. About two days worth of lectures on Python with a handful of good problems, culminating in regular expressions (like a custom CRTL + F in a Word document) and a problem where you descramble an encoded image from a website.
CodingBat — Python and Java problems. No frills, just the exercises — probably better for someone with a little bit of background (meaning you know what a function/parameter is and can use The Google to figure out/find syntax/functions you need). The site was made by the same guy who taught the Google Python Class.
Khan Academy — A few intro tutorials (mostly graphics/animation-focused) in JS using a well-regarded library (Processing.js) and then a wide-open project space for you to see programs other people have made (i.e. the end result and the code) and to make your own, potentially forking off of their work. Here’s a game that some guy made that served as inspiration for my version of Breakout: Mercury Subspace. Pretty great, right?
Codecademy — Solid read-then-write-code format of small problems broken into different subpieces. I used their HTML/CSS tutorials to get a basic background before making my personal website (http://www.thenickhuber.com/) and am going to use their stuff on more advanced JS and jQuery when I get to it. Still, their grader is a bit buggy and there’s a large variance in course quality/overlap in material, since everything is written by different people.
Learn Python The Hard Way — Read-then-implement exercises, starting from no assumed knowledge. Good, but still not as good as interactive problems; I gave up after doing ~20% or so of it because it’s unapologetically repetitive, but have read lots of good reviews of it.
Other good stuff I want to check out:
Stanford iPhone course (all slides and assignments: http://www.stanford.edu/class/cs…) — an iPhone app seems like such a good early project, because it’s so easy to show your friends what you’ve made, but have to figure out how completeable it would be for me. Also, you can’t get your problem sets graded if you’re just working on your own from the material online.
K&R (http://www.amazon.com/Programmin…) — Highly regarded intro book on C and implementations of the most canonical algorithms. (If you know of a website that tries to do something like this, would love to get it from you.)
The many CS courses on Coursera and Udacity. However, I think it’s really important that you have someone grading your work so that you can get feedback (and that you actually do the problems rather than just watch the lectures). I’m not sure if this is possible if you take the course “off-cycle” and how good the problems are, but still worth taking a look.
After a month, I’ve now got a better idea of what I can make and this then informs things that I think would be cool to make. At this point, I’m most excited about continuing with this project-based learning approach as I think it’s more effective/lasting/fun than more tutorials/classes, but it’s still tough to get this outside of the university/work environment.
Already in June 2013, Apple introduced iOS for the first time in front of the car. Optimized for use in the car function will now be presented at the Auto Show in Geneva, reports the Financial Times. Among the first partners, Ferrari, Mercedes-Benz and Volvo befänden.
Racing cars and luxury cars with iOS 7
It is not in iOS in the Car to its own operating system, but a future feature of iOS 7: Per iPad or iPhone extends the program the user interface of the vehicle’s electronics – separate Apple hardware is therefore required. Details of the deal between Cupertino and the car manufacturers are not known. However, it is not unlikely that the manufacturer will present the feature in action and announce compatible models. (more…)
“OB Disclaimer: I work for the Wikimedia Foundation, so there’s going to be a bit of a “dragonslayer” tone in this answer.
This is a long answer, but I promise you, it pays off.
First, I’ll address your concerns about working with “less talented people”. There are two things I want to bring up here:
1) I’ve been working in this industry for close to 20 years now. I’ve worked with brilliant minds and layabout assholes. Foundation engineers tend to fall closer to the “brilliant” side of that spectrum. Many of them are younger and inexperienced, but that makes them no less smart.
2) If your deciding factor for working with an employer is based around “being around intelligent people” then I think you’ll be disappointed no matter where you work. This is because of two things: a) there will always be people who you think are morons, and b) intelligent people tend to disagree with each other, and that can be a frustration that leads one to think that the other person is a moron. (more…)
I’m the Chief Economist at Google, so I believe I am uniquely qualified to answer this question.
I joined the company in 2002 and initially worked on the economics of the AdWords auction. Since then, I have worked on many other auction design problems including the AdSense auction, the IPO auction, ad exchange auctions, spectrum auctions, and top-level domain auctions. You can see some of this work Research papers of Hal R. Varian. (more…)
Of all the skills that an entrepreneur can have, I think the ability to convey an idea or opportunity, with confidence, eloquence and passion is the most universally useful skill. Whether you’re pitching a group of investors, rallying your employees, selling a customer, recruiting talent, addressing consumers, or doing a press tour, the ability to deliver a great talk is absolutely invaluable. And it is perhaps THE most under-recognized and under-nurtured skill.
They become better, more experienced, more sought-after, better-rewarded engineers. Some of the best big tech companies recognize this explicitly in their career ladders. At Google, for example, there is a separate job ladder for “individual contributors”, which culminates (or once did) at “Google Fellow”. An engineer at this level is commensurate with a Vice President, and has similar high-level impact — even moreso on questions of technology, architecture and technical direction. I believe there are similar positions at Facebook, Apple, etc. (more…)
I’ll answer this question as it seems people are curious, but I just want to mention that this outburst/accusation was made many years ago, and I feel like the answer won’t be what everyone is expecting (an angry Sun Microsystems employee, a person who hates Steve Jobs/Apple, etc). We should all be sure to respect his privacy and not go out on a witch hunt for something said years ago.
As much as I agree that scaling the backend is a very challenging thing. Android, S40 and S60 are particularly difficult to program. WP7/8 are relatively easier. There’s a reverse engineered source of the WhatsApp Android client online; take a look at the number of com.whatsapp classes and you’ll get a feel of the enormous work that this guys have done (humorously, this kind of explains why Facebook has never been able to put out a decent Android app).
On the client-side, you have to deal with fragmentation issues as your users won’t be running the same OS version, screen sizes and color depth, hardware, memory, processor, etc. Things even get messier when they’ll have to run your app on tabs. Some devices won’t even allow HTTPS out-of-the-box.
Now take Nokia S40, you have FT (full touch), NT (non touch), TT (touch and type); on S60 you have FT and TT; on Android you have FT, NT, TT (and then you also have tabs to cater for); on BB you also have FT, NT, TT (and you also have the PlayBook tab to cater for), on iOS you are free from fragmentation to an extent but there comes the iPad and then iPad mini which you also have to cater for; its only on Windows Phone that you’re somewhat free from fragmentation since Win Tabs run Win 8 and not WP8. (more…)