python script logo

What are the main weaknesses of Python as a programming language?

Answer by Jesse Tov:

The essence of my complaints with Python boils down to two things:

  • Much of the language consists of special cases rather than general features that combine in orthogonal ways. This results in infelicities and weird corner cases.
  • Guido van Rossum has a history of getting the language design really wrong (e.g., http://neopythonic.blogspot.com/2009/04/tail-recursion-elimination.html), which means that we might expect him to continue to get things wrong in the future.

Some examples:

  • 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.
  • eval

    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
    from 
    __future__ 
    import 
    braces

    .)

  • Limiting the bodies of
    lambda

    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.

View Answer on Quora

Advertisements
coding java programming

What are the best resources (sites, books or tutorials) for learning programming?

Answer by Nick Huber:

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:

  1. CodeHS — Personally graded, video-then-program format problems, starting with a toy language called Karel and moving up to Javascript, culminating in you making the game Breakout in your browser. Founded by two ex-CS106a TAs at Stanford from which the curriculum was largely adapted. They have probably 40 hours of really good content and, most importantly, provide you friendly, one-on-one help with like ~3 hours turnaround when you need it. Check out my version of Breakout I made after doing all of the content: EpicBreakout. (1)
  2. 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.
  3. 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.
  4. 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?
  5. 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.
  6. 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:

  1. 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.
  2. 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.)
  3. 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.

View Answer on Quora

python script logo

What are the best Python scripts you’ve ever written?

Answer by Akshit Khurana:

Thanking my 500+ friends who wished me on my birthday on Facebook:

It was my 21st birthday and there were three stories that made the day memorable. This was the last one of the day.

I prefer to comment on the wishes individually and personally, but using python to do that was going to be better.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# Thanking everyone who wished me on my birthday
import requests
import json

# Aman's post time
AFTER = 1353233754
TOKEN = ' <insert token here> '

def get_posts():
    """Returns dictionary of id, first names of people who posted on my wall
    between start and end time"""
    query = ("SELECT post_id, actor_id, message FROM stream WHERE "
            "filter_key = 'others' AND source_id = me() AND "
            "created_time > 1353233754 LIMIT 200")

    payload = {'q': query, 'access_token': TOKEN}
    r = requests.get('https://graph.facebook.com/fql', params=payload)
    result = json.loads(r.text)
    return result['data']

def commentall(wallposts):
    """Comments thank you on all posts"""
    #TODO convert to batch request later
    for wallpost in wallposts:

        r = requests.get('https://graph.facebook.com/%s' %
                wallpost['actor_id'])
        url = 'https://graph.facebook.com/%s/comments' % wallpost['post_id']
        user = json.loads(r.text)
        message = 'Thanks %s :)' % user['first_name']
        payload = {'access_token': TOKEN, 'message': message}
        s = requests.post(url, data=payload)

        print "Wall post %s done" % wallpost['post_id']

if __name__ == '__main__':
    commentall(get_posts())

To make this work, you need a token which you can obtain from Graph API Explorer with the appropriate permissions. The script assumes all posts after certain timestamp are birthday wishes.

With a small change in the comments function, I also liked each post.

The screen after I ran the script:

(This screenshot makes things look much cooler than they are.)

Watching the ticker go boom with my likes and comments and the structure of the comments, Shashwat Lal Das | Facebook quickly identified I had done something like this.

Probably not my best python script but this was simple, quick and fun!

The idea came up in a discussion with Sandesh Agrawal in Networks Lab. Thanks for not working on the lab assignments and wasting time with me!

View Answer on Quora

iOS Ferrari Mercedes Volvo

iOS to feature in Ferrari, Mercedes and Volvo cars

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

Apple's SIRI in Cars

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…)

Wikipedia Foundation

Are Wikipedia software development engineers of the caliber that could work as SDEs at Google / Facebook / Amazon / etc?

Answer by Brandon Harris, Senior Designer, Wikimedia Foundation:

“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…)

google logo

What do economists do at Google (their responsibilities as Google’s employees)?

Answer by Hal Varian, Chief Economist at Google:

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…)

pandora radio

Pandora : What’s the best bit of advice you’ve been given as an entrepreneur?

Answer by Tim Westergren, Founder of Pandora:

Learn public speaking.

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.

View Answer on Quora

Software Engineer

What happens to software engineers who don’t climb the corporate ladder and stay as engineers?

Answer by Harry Glaser:

They become … Unix Beards!

(Just kidding.)

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…)

steve jobs apple pixar

Who’s the guy that insults Steve Jobs in this clip of WWDC 1997?

Answer by Anonymous:

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.

(more…)

whatsapp messenger

How did WhatsApp team go about building app on multiple platforms cheaply?

Answer by Sayo Oladeji:

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…)