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

Julia Hirschberg gave a keynote at this year's EMNLP on this topic. Short answer was that ML can do better than trained humans in some cases, but very far from "almost any".

I don't think EMNLP has posted talk videos yet but these slides look very similar: http://www.cs.columbia.edu/~julia/talks/ICASSP2018-latest.pd...


This is pretty good advice overall. One small change I suggest is to take it easy on Design Patterns and the like. I’ve seen people in OPs position (general smarts but limited production experience) turn into architecture astronauts and start overengineering everything. It can be useful if you’re working on a legacy codebase and need to understand the jargon that can appear in [possibly overengineered] existing codebases.


I've written software over a decade and I loath the design patterns book.

I would not give it to a beginner as it would corrupt their mind with useless drivel .

It's authors exhibit themselves as morons who celebrate renaming existing computer science concepts while occasionally mixing and matching them.

I would not be this uncharitable towards it if it was not such a famous (and hence harmfull) book.

It's harmfull because software engineering is really hard, and they just add up to the load by trying to have the reader memoize their junk instead of doing something that would actually make them a better programmer. And, if you try to use their concepts while programming - shudders, oh god help you.

I'm not going to iterate over every pattern. Here's an example:

Flywheight? You assholes, just tell memoization for what it is. Why don't you rename existing data structures as well? Good thing those come out of the box, otherwise you would have began the book by renaming array, linked list and dictionary. Maybe you would have called linked list "the chaingang" or something.

You don't simplify things by giving things cuddlier names. You stunt peoples growth that way.

Gang of four book is a malignant offshoot of the practice of attempting to make software engineering better by legalizing and dogmatizing it by decomposition into trivial details that hurt your brain. It's a branch of 'consultancy driven software development' where people attempt to aquire a halo of professionalism by calling things by fancy names and over-complex descriptions (while skipping the practical things with equally complex names but at least those weren't made up by a bunch of idiots).


While I agree that the GoF book is way overrated, I think you're being a bit harsh. Most of the patterns are actually tricks to overcome limitations of statically-typed class-based languages like C++ and Java. They can be useful in these languages but are not necessary with dynamic languages. Take Strategy for instance, with Python or JS, we'd just use a callback but in old Java you couldn't do that, hence the need for a more complicated technique. Creational patterns also mostly fall in this category. Some are so trivial (Template Method, Adapter), that it's hard to understand why they make them such a big deal.

Among the few patterns that are more generally useful and have stood the test of time, we'd find Composite, Command and of course Observer.


Your comment is very interesting. I recently took a course on Design Patterns. I sat squirming during the lectures because I didn't like what was being said, but couldn't put my finger on what exactly I disliked.

What I understand from your comment is that you dislike the Gang of four book because it renames concepts that don't need the cutesy names that they give them. Do you have a problem with the _concept_ of design patterns? Or just the names they are given? Are the concepts themselves sound and worth paying attention to?


I wrote a long rant as a response to another comment above. To quote myself:

"It reads like it was written by a clever, verbose, and 'over-eager novice."

Design patterns are a really usefull concept. The GoF book just totally botches up that concept by dwelving deep in trivial language details while missing the big picture.

Christopher Alexander's "A timeless way of building", and "Notes on the Synthesis of Form" are the books in architecture that prompted a lot of dicussion in software design circles, and from which I presume GoF got their idea of software design patterns.

What are good design patterns in software? IMO they are composed from the programming models exposed in a basic CS book like Aho and Ullman's "Foundations of Computer Science" and further developed in a books like Structure And Intrepretation of Computer Programs.

GoF is an ok anecdotal reference after those, but it really is not suitable as a didactic resource.

Peter Norvig wryly commented that 16 of the 23 pattern are either invisible or non-existent in lisp Lisp[0].

[0] http://www.norvig.com/design-patterns/design-patterns.pdf


I do not like the GOF book. Some of the patterns appears sometimes in my code, but the book has never helped me to program better or helped me to think about my code. The single benefit I got from this book is that it gaves me words to explain my code to other people.


your instinctual reaction against design patterns because you may have realised that design patterns are patches over flaws in the programming language's design - they're a terrible basis to build an architecture on. There's some discussion on this idea at the C2 wiki: http://wiki.c2.com/?AreDesignPatternsMissingLanguageFeatures


Thanks for this post, I remember reading about "Flyweight" and being confused at the time, if it's just memoization that instantly makes sense and is just such a better way of describing things.


I disagree.

Design Patterns are very useful, but they are a tool like anything else.

They're not just a bunch of things with cutesy names, they are the most common and core patterns that we can use in OO.

Yes, they are way overused, particularly in Java, but they are useful.

The book could be summarized however.


Everybody recommends it for no particular reason, and then I read one anonymous post ripping it apart in detail. I’m strongly inclined toward believing the latter and massively discounting most people’s opinion as unfounded, assuming they didn’t read it, and are just trying to convince others that they did. Is this the right way to think about this?


Being charitable, you could say at least part of the former are experiencing confirmation bias - that they enjoyed reading a different take on their existing knowledge - and cannot be arbiters of whether the book imparts anything useful to those without that knowledge.


as a middle ground: my advice would be to learn and internalize design patterns. and then “forget them.” let experience show you when to break the rules. keep things simple.

this level of the craft is subtle, intuitive, and often inaccessible to the conscious intellect.


I agree. I would like to add, doing something like The Rails Tutorial from Michael Hartl would be a great place to start. It takes you through a reasonably real world application including testing and how to think about the constituent parts. A PhD is like being an expert in materials science while lacking in craft-level skills such as running a vertical mill.


To all readers who've never experienced it, working on a large Java (and other) codebases where the original developers completely overused patterns, your life will be hell in my opinion, just as much as a codebase written totally without thought or patterns.

Patterns can be useful but only in moderation and only with reason. They're spice.

A contrived example, but:

https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpris...

FizzBuzz Enterprise Edition. It's enterprisey!


Click is nice, but for my money, Fire is what Click should have been. https://github.com/google/python-fire


I love how optinionated Click is, especially around how CLI tools should be documented. I feel like I built a better tool because Click guided me towards best CLI design practices.


The significant downside to click is the slow startup time. Seems to add more than a second to startup in most cases! Still love it though.


Tesla is the only major manufacturer using induction motors that I know of. Everyone else is using synchronous motors with permanent magnets.


Tesla is precisely doing it to decrease dependence on China. The synchronous motor is far superior technology efficiency wise. But Tesla is going for stable supply chains as far as possible (which is smart).

Synchronous as well as Asynchronous (no magnet) motors are both very durable. We're talking hundreds of thousands, if not a million hours of operation (according to Tesla that's 60,000,000 miles at 60mph). If we don't throw away the motors with every car purchase (which is a big if in today's world of yearly disposable smartphones). Then even a small efficiency advantage should be immensely useful over the life of the motor. IIRC we're talking about 10% more efficiency for synchronous. If you drive it for 1,000,000h and use about 20kW in average operation, that is 20,000,000kWh. 10% would be 2,000,000kWh. That's significant.

NYC has a peak demand of 14,500MW (see here: http://blogs.ei.columbia.edu/2015/09/28/how-much-energy-does...). So you could power NYC for 8mins at it's peak usage with these lifetime efficiency savings(again it's unrealistic that the motors will actually run that long in cars, but at least the rare earths could be easily recouped when recycled properly).

So the motor is one of the places where an initial investment in rare earths, could be paid off easily over the lifetime of the motor. Assuming that motors aren't disposed of.

The batteries still require massive amounts of rare-earths though, and they don't have the same durability. I see much more of an environmental disaster coming here.


The Tesla Model 3 motor uses permanent magnets unlike the S and X. Another commenter claims rare earths are not needed in battery production.


> (which is a big if in today's world of yearly disposable smartphones)

The auto industry heavily recycles. Pretty much every major part costs extra if you don't return the old "core" so it can be re-manufactured. Autos are stripped down before the frame is crushed. Not doing so leaves money on the table. I don't see EVs being much different.


Your Python example doesn't really support your argument. Python succeeded for data analysis and scientific computing in part because it provided easy access to existing numerical libraries written in C and Fortran. So you got the best of both worlds: ease of use and near-native speed. It would not have succeeded if everything was done in interpreted Python.


> ease of use and near-native speed

And still when we want actual speed we port it to C++ or at least need to use Cython.


I was once a physicist and I never understood it either. Maybe because a lot of software they produce is a blob of code?


Still much denser. Around 150 ft^2 per employee.

https://www.google.com/search?q=square+ft+per+employee



To be fair to Zakarin, the finish is substantially steeper than the section Peter was on, and he had just spent the 30 minutes on the rivet to get the stage win.


There's a difference between "restricted stock" and RSUs. The first means you get all the stock up front but it has a buyback provision that goes away over a vesting schedule. The second means actual shares are released over a vesting schedule. Only the first is relevant to 83b.

See for example http://www.investopedia.com/articles/tax/09/restricted-stock...


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

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

Search: