Hacker News new | comments | ask | show | jobs | submit login

Django is one of my favorite open-source projects. I owe the project a lot.

Years ago, when I was a Microsoft-only shill (yeah, I'll say it), I knew how to build almost anything as long as something from Microsoft was under the covers. I was proud of my abilities, and in spite of the anti-MS crowd, I stood up for my platform and was a good developer.

In 2006, I had a short two-week break from my startup job, and my wife & kids were traveling to their grandparents' house at the same time. I had 336 consecutive hours to spend as I wanted, something I hadn't been able to do in many years. I decided I wanted to work on a little side project, something I could complete within those two weeks.

I made a decision to break out of my comfort zone. I knew a little about Linux, nothing about Apache, zero about Python, and had never worked with Mysql. I came up with an idea for a simple little CRUD application, just a utility site. It was something I knew I could build in maybe two or three days using Microsoft tools.

So, I searched around and found Django. I downloaded v0.9x (it was sometime in the summer, can't recall what it was specifically. I know it was pre-v1.)

And I started from the beginning, purely a newb. It was a position I wasn't accustomed to, so I immediately felt a lack of boundaries and sense of control. But the Django documentation was really good, and I soon gained an understanding of everything I needed to learn -- Python, running Apache, configuring Django, wiring up Mysql. I stayed focused and in one week, I had written my ridiculously simple CRUD app.

But the value I got out of it was how well the project pulled me in to becoming productive on a platform that I'd never used. Not only that, there was the help in the discussion groups from the community. It was a lot of fun, and I could recognize myself becoming a better developer.

The biggest realization came when I compared my Django project to an equivalent built on Microsoft tools. It wasn't a comparison of one-week vs. two-days, but rather one-week coming from square 1. All this led me to rethink my thoughts around my Microsoft background. I didn't become a convert per se, but it made me realize there are so many other ways of solving problems and other systems on which to build applications. And, after feeling productive, it made it easier for me to explore other (non-Microsoft) technologies. The feeling of being productive in multiple environments was so empowering.

I'm not sentimental about software, but the Django project is kind of that kid who can do no wrong in my eyes, due to my formative experience with it.

My experiences are somewhat similar to yours. When people ask me how I learned Python, I tell them I started with the Django tutorials.

I'm quite interested in your experiences with Django, as I'm somewhat in the same boat. I'm a .NET developer, and while I love C#, am a fan of strongly-typed languages, and am quite fond of the .NET framework I have a soft spot for Python and especially Django.

Similarly, I had a few days and decided to go out of my comfort zone. A few days later I had written a blog script and had modified it to work with Google App Engine.

Do you use Python/Django in a professional setting now? If so, how did you find the full-time conversion?

am a fan of strongly-typed languages

Nit-pick: suspect you are actually a fan of statically-typed languages. Python is a strongly-typed language, but not statically-typed.

(general easy way to tell them apart: in a statically-typed language, both the name and the value bound to it have a type, and those types must match; in a dynamically-typed language only the value has a type; in a weakly-typed language, operations on incompatible types are permitted, and they may be coerced for compatibility; in a strongly-typed language, operations on incompatible types are an error -- usually at compile-time or equivalent for statically-typed, usually run-time for dynamically-typed)

> Nit-pick: suspect you are actually a fan of statically-typed languages.

And probably closer to "statically-but-not-too-statically-typed-because-really-more-than-my-language-of-choice-is-too-much" languages. Self-avowed fans of "statically-typed languages" (usually java or C#) rarely consider giving up nulls and casts.

In some cases, Java is more weakly typed than Python or Ruby.


System.out.println("abc" + 5); -> "abc5"


print "abc" + 5 -> TypeError: cannot concatenate 'str' and 'int' objects


puts "abc" + 5 -> TypeError: can't convert Fixnum into String

And here we can see the issues and clusterfucks of the completely undefined and arbitrary "concept" of "weak" (conv. strong) typing: java's behavior here is well-defined, simple and statically typed, there's no more type loss than when doing `5 + 1.0` in Ruby or Python.

Why do you find implicitly converting an int (/Fixnum) to a float (/Float) more palatable, when they have completely different internal representations, domains of definition, precisions, operational semantics and potential pitfalls?

And what about Python's `"foo" * 3`? Hell, what about this:

    > class Fixnum
    >   def to_str
    >     self.to_s
    >   end
    > end
    => nil
    > "5" + 3
    => "53"
so "strongly typed" it has a protocol for implicit string conversion.

But wait, there's more without even bothering with overrides:

    > a = [1, 2, 3]
    => [1, 2, 3]
    > a[1.4]
    => 2
floating-point index to an array? no problem.

You're in the exact same spot I was. C# developer, completely enthralled with strongly-typed languages and OO development.

I definitely use Python professionally (and some Django, but that's not the critical stuff.) It's not the only thing I do, but it's another arrow in my quiver. It's really useful for generating applications that need to do a lot of stuff, but benefit from brevity in code. Django is actually more responsible for me learning Python and how to use it responsibly in a production environment. I knew how to write services in C# and Java that wouldn't be an administrative nightmare or cause pagers to go off at odd hours, so I needed to learn that with Python (turns out, it's not hard.)

As always, your mileage may vary. Nonetheless, lean toward finding a use for it in your operation, if only for experience. It's super practical, and to minimize transitional familiarity, go with IronPython. Works with all the VS IDEs.

One of my big reasons for wanting to pick up Python was to get me out of developing on Windows. As much as people love to tout Mono, it's simply not desirable for any .NET shop.

My biggest worry was if I was offered a job at a great company, how I would be able to adapt not to the language, but going from an entirely different platform, one that I hadn't used in anger since uni. Learning a language shouldn't be a problem, but as I've found out, most of my issues aren't in using the language itself, but adjusting to the Unix workflow.

Also, my big worry is being the "Windows guy" at an office. I doubt I'm the first C# developer to be laughed at because I develop on Windows, even if it's by (in my opinion) fairly crappy developers. Deep down, I reckon a lot of devs look down on people that have the audacity to call themselves developers when they don't build on Linux.

So, I guess my next two questions are:

1. Did you notice a decrease in "professional level" when you moved from C# to Python. I'm a mid-weight developer, probably not too far off from being a senior developer. With very limited Python experience I doubt I'd be able to just jump over to being a mid-level developer, and to be honest I wouldn't want to drop in salary by too much just so I can use a different language.

2. How easy was it to land a job writing Python if you've not come with "previous professional experience"? I've written a bit of Python, simply to script some things on a Windows server. I've got my own scripts, but nothing in an actual job. I reckon I could pick it up (Python/Django), along with a good dev workflow in Linux, within a few months, but I can see employers being skeptical to hire a C# dev if another Python dev wants the job.

Actually, I find a lot of developers who don't care for Windows who very much like C#.

To your questions:

1) Professional level decrease? Not hardly. If anything, I found strong professionalism in Python. "Pythonistas" are huge in principles such as DRY, which isn't about something terribly complex but rather keeping things simple and clean. It's about being organizationally effective and not coding one's self into a corner. The fact that the language seems so easy to work with shouldn't give the impression of it being simplistic.

2) I didn't land a job writing Python, it's just a tool to get things done. From a career standpoint, I don't want to be known as a {language/platform/thing} guy, I simply want to be known as an engineer. Tools, languages, platforms, services, etc. will come and go. As long as I recognize how to use those in combination to get things done efficiently, I'm doing my job.

Python is strongly typed, you mean statically typed.

Yep, typo on my part.

If only English was statically typed.

I had a somewhat similar experience. I was using PHP for many, many years and after hearing all the fuzz about Ruby/Rails I tried to learned it but it didn't really click with me. However, when I tried Python/Django I was immediately hooked. The main deciding factors were Django admin site and the (cleaner than Ruby) Python syntax.

Django admin site is still my favourite feature.

Applications are open for YC Summer 2019

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