Hacker News new | more | comments | ask | show | jobs | submit login
Ask HN: If you're “ridiculously in love with Python”, do you even know it well?
46 points by cakoose on Jan 21, 2015 | hide | past | web | favorite | 40 comments
I noticed the following requirement on a job posting:

"You're ridiculously in love with Python."

I realize they're probably using exaggerated language to make the job posting stand out, but my initial reaction was that anyone "ridiculously in love" with Python (or any language) probably doesn't know it well. And I'd be a little worried about working with the person who wrote that requirement.

More broadly, who is that phrase supposed to appeal to? Are they intentionally trying to get people who are still in the honeymoon phase with Python? Maybe those people are generally less jaded and would fit in better?

Or maybe they're trying to select for people who don't complain about their tools, people who "just get the job done"? This seems to risk also selecting people who aren't discerning, but maybe the tradeoff is worth it?

Did anyone else react the same way I did?




No, python is the programming language that everyone thinks Java is.

Is Java slow? Nope. Does everyone think it is? Yes. Is python? Yes.

Does Java have the best libraries? Hell no. Does everyone think it does? Yep. Is python really the language with the best libraries? Yep.

Python is easy to write, and to write well. Python makes it easy to crank something out in half an hour that isn't messy.

I am ridiciulously in love with python, although lately I have been placing more value on runtime speed than development speed, so I find myself using it less than in years prior. It is still my favorite programming language, however.


What language/languages you prefer for runtime speed?


Depends what you're doing obviously but I have been writing Go, Java, and Rust lately.

I cannot wait to see what becomes of Julia. I feel as if it has all the prototypical traits of python, though far more speed.


You might like Nim, too, based on that criteria. Granted, I don't know how similar it is to Python, but it seems like it's got potential.


Re: Julia

What about library integration?


You can in general write julia libraries in julia, wheres you often need to resort to C if writing Python libraries, e.g. https://github.com/python-pillow/Pillow . Therefore the native ecosystem is growing rather fast. On the other hand, Julia has great c and python interaction so making existing work accessible is not so difficult either.


Okay, I'll go against the grain here and sign up for scrutiny:

I probably regularly profess my love for python, and I'm prone to hyperbole (plus I love the word 'ridiculous') so I could totally see myself making that statement.

So now, do I know it well? I dunno, not that well I guess. I've been doing it full time for four or five years now (after a decade-plus of other languages), I imagine I'd rank pretty competent in an average shop and "lots to learn" over at say, Dropbox. I have definitely worked with it enough to be exposed to loads of it's shortcomings and flaws though. I still love it. Just like with people, love is a decision I re-make on a continual basis. I sign up for the less ideal bits because the good bits make me really delighted and "just fit".

So anyways, yeah.. I know it's popular to be the "I don't care, anything works, best tool for the job" person, but I'd prefer not to write any more Java code anytime soon if I can avoid it. I guess I'm not that kind of awesome-flexible.

Now as for employers, even I might take this as a negative signal. I love python, but hiring in one's own image on that vector seems a little strange... unless there's a really good reason a passion for python is important (like, I dunno.. Maybe the position is for the python team at NewRelic? Anywhere the company's future is pretty latched onto the language specifically).


For personal projects, my default is C++. It's a deeply flawed language, but I love it anyway. Besides, I've never met a perfect language, but I've met plenty of languages that let me get work done, some more pleasantly than others.

(Why would I call C++ pleasant? It's probably thanks to more than a decade of working with it warping my mind until it seems to make sense.)


I find myself reacting more and more negatively to "language-specific-experience-required" statements in a job posting for a full-time employee. It's fine for a contractor or consultant needed to solve a specific problem or set of them on a time-limited basis. For a full-time employee however such language is, in my opinion, an indicator that at least one of the following apply:

a) the company is looking for junior level talent with specific language experience so they don't have to train them

b) the company is looking for senior level talent but thinks it can't afford them using any time to pick up the syntax or quirks of the language

c) the company is looking for senior level talent but doesn't think it's even possible a competent senior developer with mostly X experience and no Y experience can pick up Y in an "acceptable" amount of time

d) the company is so invested in their "stack" that (even considering) deviation from it will introduce a net negative (to the process, culture, whatever)

These all have a common theme: the labor that provides the bulk of the value they are able to trade and profit off of is seen as a commodity, as fungible as the brand of paper used in the printers. The company wants a developer who works "out-of-the-box" without any investment and can be discarded/upgraded at any time for any reason. They probably also want the human line-item to display a near-maniacal enthusiasm for the work and loyalty in return.

It's not that they want people who aren't discerning: they probably don't care, as long as the people they hire can fake it.

Also, being "ridiculously in love" with a language doesn't mean one doesn't know it well. For me, it's the opposite: I'm "ridiculously in love" with C++ because I know it as well as I do (which isn't to say I'm an expert). That doesn't mean I'm going to turn down non-C++ jobs or view them as being less interesting, etc.


Over my career, I've gone from loving Python, to having been bitten enough by it to evaluate and use other languages.

Most of the time, it's "fast enough" for the job. But when it isn't, it really isn't.

Most of the time the standard libraries suffice for a job. But when they don't, you're suddenly in pip/easy_install hell. [1]

Most of the time you can get by with Python 3. But when you need to broadly distribute code with a dependency on a compiled binary, may the heavens help you. [2]

Most of the time, the syntax and "magic" won't bite you. But when it does, it does so hard. [3]

Most of the time, pylint/pychecker/etc. will find the same errors a compiler would...

You get the picture.

I still program with Python frequently, but I've increased the size of my programming language toolbox to compensate for its weaknesses.

[1] Or was that virtualenv, or setup.py, or apt/yum/nix, or...

[2] Broadly distribute means putting it on boxes where a C compiler is not available. This means you typically get to pre-compile those libraries and create either wheels or native packages. Not impossible, but for a "batteries included" high level language it's a lot of specialized low level grunt work.

[3] The infamous `def a(b=[]):` "feature" for one, anything involving metaclasses for another.


I find python by far my favorite language to have used, but I basically agree with this. No language is perfect for every use, nor could there ever be such a language (until computing changes dramatically, anyway; quantum computing maybe?)

Until then, even a language one loves deeply - and I'm not sure I'm there yet with python, though i'm closer than with any other language I've used - will have flaws and times where it's not the best tool for the job.


As someone who is currently "In Love With Python", I'm curious what other languages you recommend? I'm always looking to learn new stuff.


Depends on what you want to do.

Go is a fairly strong candidate for a straight up replacement for Python, but there will be a lot of newer things to learn with regards to using a compiled language without a repl, and the lack of traditional polymorphism.

Another good one is any kind of functional language, be it Haskell, Clojure, or OCaml. Learning how to think functionally will help your Python code quite a bit.

At some point in the future, Rust would be a good one to put on your list, but I don't believe that it is in a great place right now. It's getting better, but I don't feel that it's ready yet for production development. I think Mozilla can get away with it because they own the minds who are developing the language, and as such can hit the moving target which Rust currently is.


I'm not quite sure what I want to do, other than I don't want to do front-end development.

The other language I have any experience in is Delphi, which is a compiled language.

I have heard a lot of good things about Go, maybe I'll give that a shot.

I'd love to learn a functional language. I've looked at Haskell, and ouch. As someone with no formalized CS training, a lot of the type theory stuff goes right over my head. Is there a less crazy functional language you would recommend?

Yeah, I've looked a little at Rust, and it looks like it'll be interesting in a couple years.


> Is there a less crazy functional language you would recommend?

Clojure. It's a well supported and documented dialect of Lisp, which is a fundamentally functional language (though not purely functional), implemented on a platform that just about everyone has access to: the JVM.

The more you can minimize your use of the dot operator (which implicitly means minimizing your dependence on Java libraries), the more you'll learn about functional programming.


Alright, thanks. I'll give Clojure a shot at some point. I've played around with lisp a tiny bit in the context of reading SCIP, but that's about it.


You might want to look at Haskell again and not read too much into the type theory stuff at first, but learn how to use common monads, functors, etc.

Here's some code that might be convincing and understandable (correct me if I'm wrong!):

From a not quite yet ready to release everywhere web scraping library of mine in Haskell:

    main = runScraper $ do
        get "https://www.paypal.com/login"
    
        postToForm (Name "login_form") (Just creds) AllVisible
    
        get "https://www.paypal.com/myaccount/home"
    
        cursor <- liftM (fromMaybe (error "Couldn't get cursor")) getCurrentCursor
        liftIO . putStrLn $ "Your Paypal balance is: " <> getPaypalBalance cursor
    
      where creds =  [ ("login_email", "email@example.com") -- put your credentials here
                     , ("login_password", "password")]
An example of using lenses and imperative programming to create pong[0]:

    -- Update the paddles
    updatePaddles :: Float -> State Pong ()
    updatePaddles time = do
      p <- get
    
      let paddleMovement = time * paddleSpeed
          keyPressed key = p^.keys.contains (SpecialKey key)
    
      -- Update the player's paddle based on keys
      when (keyPressed KeyUp)   $ paddle1 += paddleMovement
      when (keyPressed KeyDown) $ paddle1 -= paddleMovement
    
      -- Calculate the optimal position
      let optimal = hitPos (p^.ballPos) (p^.ballSpeed)
          acc     = accuracy p
          target  = optimal * acc + (p^.ballPos._y) * (1 - acc)
          dist    = target - p^.paddle2
    
      -- Move the CPU's paddle towards this optimal position as needed
      when (abs dist > paddleHeight/3) $
        case compare dist 0 of
          GT -> paddle2 += paddleMovement
          LT -> paddle2 -= paddleMovement
          _  -> return ()
    
      -- Make sure both paddles don't leave the playing area
      paddle1 %= clamp (paddleHeight/2)
      paddle2 %= clamp (paddleHeight/2)
From "Program imperatively using Haskell lenses"[1]:

    battle :: StateT Game IO ()
    battle = do
        -- Charge!
        forM_ ["Take that!", "and that!", "and that!"] $ \taunt -> do
            lift $ putStrLn taunt
            strike
    
        -- The dragon awakes!
        fireBreath (Point 0.5 1.5)
        
        replicateM_ 3 $ do
            -- The better part of valor
            retreat
    
            -- Boss chases them
            zoom (boss.position) $ do
                x += 10
                y += 10


As a side note, I have seen the `def a(b=[])` being used to have a static variable in a function.


Can someone elaborate on this? I thought I had seen all the Python idioms but this one is new to me.


  def a(b=[]):
      b.append(1)
      print b
Now if you do,

  a()
  a()
you might expect to see

  [1]
  [1]
but you will actually see

  [1]
  [1, 1]
The list is not created at function call time, but at function definition time.


This has bitten me more times than I'd care to admit.


It's just common job ad speak. You shouldn't take it too seriously...


You shouldn't take it too lightly either. The hiring process is a two-way selection. And the words they use to describe the position say something about their culture. If part of the job description raises red flags with you, it might be an initial sign there there is not a cultural fit.


You're on the right track toward the end. It means they built their MVP in Python, and they've built more & more features on it in Python. Now they're looking for someone who will happily work on their existing codebase. They want it to be the best Python it can be. They want someone who knows the language inside & out; someone who goes to Python conventions and follows all the big Pythonistas on Twitter to get all the latest tips & tricks. And, they don't want daily requests to rewrite the whole thing in some developer's favorite language.

It wasn't that long ago people were clamoring for all the PHP in the world to be rewritten in Python. Ten years ago, I was part of one of thousands of efforts across the globe to rewrite a legacy codebase in hot new J2EE awesomeness. Around the turn of the century, it was a push to replace ancient COBOL with hip, modern C++. There's always a hot new language that makes the old hotness look ridiculous in comparison. This industry is like the fashion industry in more ways than we're willing to admit. But it's totally possible to run a successful business on a language with warts. Yes, even PHP.

If you ask them, they'll probably tell you they really do want someone discerning, someone passionate about programming languages. But right now they've prioritized their business needs over a rewrite for the sake of a rewrite.


You don't really need to know a lot of python to know it well. For example, you might need to know a lot of C++ to know C++ well.

Python is great because it does a lot, while being easy to understand, and it only does what matters the most.

> More broadly, who is that phrase supposed to appeal to?

I guess it tries to appeal to programmers who cares about using a technology they're comfortable with, but also that encourages good enough programming practices, design choices and programming philosophy.

Python is really a great choice for many things, and apart for the particular indenting style, I really don't think there are many users who dislikes python. It's also very unix friendly, has the good parts of C, has native tuples and hashmap, etc. I don't see many bad things about python.

Of course, python has never been designed for speed, but every programmer should know that the language will not be the source of sluggishness, the code and software design will be. I don't think there are many projects out there who will need high performance vectored data processing, and if there is, either use cython or optimize the parts you need, or even use OpenCL. Making a large video game projects is another subject, as most of them often use C++ anyways.


while ( i --> 0 ){ printf ("%d\n", i); }


Sounds like they are targeting a jr programmer who learned java/c++ in school but absolutely loves python in comparison, which is easy to love coming from java or c++. Nothing wrong with that, just sounds like you are not their target for this job.


Job posts are marketing ads, so don't take it seriously. All this posting is hoping to do is to attract people who like Python and get them to apply.

This won't get 100% of the applicants you want but it will get some of then, and that's the whole point.


"ridiculously in love" with a programming language?

Ok, I'll describe my condition when I experienced that. I was coding in C under MS-DOS and PIC assembler at the time. C++ was starting to become a thing, and I was just starting to sniff at Linux. I needed a change of venue in several major ways.

About this time, I started picking up a little python and perl. Interpretive languages had just opened up to me, and I was IN LOVE. The things I could do without writing a framework to support it impressed me a lot.

I was so very naive that new-to-me language features were a huge deal.

Hope that helps.


I'm ridiculously in love with python. For what I do, there are lots of high quality, actively maintained libraries. I understand its shortcomings, both as a language and as a community. I also understand that given a slightly different path, I would be equally in love with other language choices.

Does this mean I probably don't know the language well? Maybe. Honestly, none of this really matters to me as long as I can quickly understand code other people wrote, and I can efficiently write maintainable code.


I don't subscribe to the practice of being in love with a language,being a ninja or a wizard– I find these are callings for those who will work for less than they are worth. You are speaking to their hubris and not their confidence of skill set.


It's a good point. With many domains... the more deeply you know something, the more you know about the grimy details, and the likelihood of unfettered love for that thing is reduced.


I'd argue the opposite. I'd say it's impossible to love something if you don't know the ugly details. It's about being enamored with a language despite it's shortcomings. You know, just like loving people.


I don't look at the statement and think of all the loopholes, no.

If they're asking for this, it's clearly because they're committed to Python and they want a developer equally fanatical about Python. I doubt this is the only condition for getting the job, experience will account for something.

In answer to "who this will appeal to", many people love Python, know Python and would like to use Python more. Sticking this in your advert clearly marks this as a company who you will align well with.


Translation: they want a Python expert who can come in on day 1 and fix all of their buggy code and churn out massive amounts of Python code. Since you love Python so much you won't care if the product is boring, you won't care if you are being underpaid, you won't ask to work on other development domains and you certainly won't ask for a promotion.


Recruiter: I get the feeling that you're not really passionate about these languages and technologies.

Me: A language is a language. I'm passionate about working in a sane environment with good practices, delivering software that doesn't suck.


Sorry, but you seem unable to see why people like Python (or a different language X). Until you see that, you won't understand why job postings are written like that.

This is not to say Python (or X) is a perfect language or that you have to agree with those that like it - it's just not your language.


I don't agree. I've been ridiculously in love with a few languages over the years, but it's a passing phase. The more you get to know something the more design compromises etc you see.

No language is perfect, but Clojure is the best designed I think I've come across. I really like it, more than any other (including a few years of Python which I 'liked' at the time). It has strengths and weaknesses though, and that's expected of anything.

"Ridiculously in love with" is recruitment fluff, but I think does have the side-effect of appealing to that temporary experience, or to people prone to hyperbole.

See also Dunning-Kruger.


Ah, but that's fine regarding the recruitment fluff.

The question above carries the assumption that one can't be "ridiculously in love" with a programming language because "if only they knew better" they'd realise the flaws of the language (whether that's specifically Python or a different language).

But that's inherent to any programming language - it'll be good for some things and bad for others - using the phrase "ridiculously in love" just means they're looking for someone who likes working in that language.


I suppose it must be cultural. The term 'in love' and intensifier 'ridiculously' just don't mean 'like'. Otherwise 'like' would do.




Applications are open for YC Summer 2019

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

Search: