Ask HN:  When does programming start to make sense? - <AUTHOR> How long did it take before you could write code on your own?  Every time I try to learn programming, it feels painfully slow compared to other things I've picked up.  Maybe I'm the opposite of a natural.  I took C++ in college and studied Ruby & PHP on my own. <comment><USER3> Alan Turing said that programming would always be interesting because the boring mechanical aspects could be automated (where "interesting" means "you don't understand it" - or else you could automate it.) I daily run into issues that I don't understand. That's what programming _is_ for me, I'm afraid; rather like science. It's a sequence of monsters. The best we can do is to be tackling new monsters, not the same ones.

Of course, programming jobs do exist where you do the same thing over and over again. And there's a threshold of skill required before you can automate some classes of things; and you also need a clear understanding of the task, to see precisely which aspects are mechanical, and which aspects are configurable. It pretty quickly gets into compsci research. And sometimes it's not worth the effort (it can take a _lot_ of effort.)

But if you've ever called a method twice, instead of writing the code twice, then you have done some of it.

I feel that your question "start to make sense" suggests your thinking is all- or-nothing. Does _no_ aspect of programming make sense to you - or do some "trivial" aspects make sense but they "don't count"? Does a print statement make sense to you, to some extent? Does a loop make sense to you? There's a continuum of mastery. If you only acknowledge perfect and complete mastery as "mastery", then you won't feel any satisfaction in mastery of one small bit of it. And without the confidence and encouragement of that success, it's very hard to be motivated to continue. (oh yeah, plus, of course, it's impossible to have perfect and complete mastery of programming anyway, for Turing's reason.)

</comment><comment><USER4> It took me a long, long time until I became reasonably confident that most problems would eventually succumb to my programming ability. Probably almost twenty years from when I wrote my first program, or a few years after college.

I can't write code on my own, though -- unless the problem is trivial and the APIs I'm using I know like the back of my hand, I _need_ an Internet connection to do it.

Part of this issue is possibly that competent people are disproportionately stalked by the worry that they're secretly incompetent.

<comment><USER5> That is interesting. The experience has been almost the opposite for me. When I first started programming, it did not take me long to start "getting it", and I was very confident that there was no programming problem I could not solve. As the years went by, I've noticed that my confidence has decreased to the point where I am almost certain that there is no problem I _can_ solve (besides the most trivial ones). Maybe I'm just getting dumber.

<comment><USER6> Absolutely not. As you gain domain knowledge you should feel exactly this way. I'd suggest that you be concerned if you didn't feel this way. When I finished highschool I thought I was pretty damn smart and had a lot of things figured out (clearly not the case). From an academic point of view as I worked towards my Ph.D. I was constantly reminded of how very little I did know. While I did learn new things day by day, my appreciation for how much I didn't know grew exponentially. In fact I think what I'm left with after the whole exercise is not a confidence in my knowledge but rather a confidence in my ability to learn, problem solve and ask questions.

<comment><USER7> "Universities are repositories of learning because students enter knowing everything, and leave knowing nothing."

</comment></comment></comment></comment><comment><USER8> > Every time I try to learn programming, it feels painfully slow compared to > other things I've picked up.

It's probably slow because you're not having fun with it. You're probably not having fun with it because you're not solving a compelling goal. Ask yourself whether you're learning "just to learn it" or are you trying to solve a problem and this particular language/api/compiler/implementation will help you achieve that goal.

I might be presumptuous here (and I apologize if I'm wrong) but the times I've found myself stuck "learning" have been when I was just going through the lessons for the heck of it, without a real goal in mind, without something to accomplish.

Also, have a look at this: [http://railstips.org/blog/archives/2010/01/12/i-have-no- tale...](http://railstips.org/blog/archives/2010/01/12/i-have-no-talent/) I found it inspirational.

<comment><USER9> It was no fun when I REALLY learned how to program, it was pure panic. I was half way through a CS degree and got a summer job, and I just had get it done no matter what so I beat my head against the problems and solved them. After that, all the theory that I'd been learning started to make sense, and now I have a more nuanced approach to coding, and a successful career.

Just trying to say, learning is not always fun. Get a job doing something you don't know how to do. Maybe that will motivate you. :)

</comment></comment><comment><USER10> I cannot stress this enough: _learn refactoring_ , [http://www.amazon.com/Refactoring-Improving-Design- Existing-...](http://www.amazon.com/Refactoring-Improving-Design-Existing- Code/dp/0201485672)

You will simultaneously learn:

\- terminology and models relevant to software design and construction at every level

\- principles of good coding and how to tell good code from bad

\- the ability to redesign code as needed

\- the experience and knowledge necessary to approach coding with confidence

All of these are the most critical tools you need to transform yourself from someone who sorta-kinda knows a few principles of coding to someone who groks software construction.

If I had to choose between a co-worker who truly groked the principles of re- factoring and a co-worker who had a PhD in Computer Science I would choose the former every time. It's really that important.

<comment><USER11> I don't think that's good advice for a newbie.

To the OP: practice, practice and practice. It will take a long time. Months to start getting it, years to go anywhere. 10+ years to be good. If it's too hard, choose another profession. 99% of folks out there would hate programming.

<comment><USER10> I could not disagree more, refactoring is perfect for a newbie. It's not an advanced technique, it's fundamentals. Any beginner who can write a method can extract a method.

But more than that, refactoring provides the mental models and the vocabulary to talk about, reason about, and understand code. It provides well-worn expert advice about the characteristics that make good code good and bad code bad, heuristics to be able to recognize good and bad code, and basic techniques to transform bad good into good safely and effectively.

There may be some advanced techniques in the book itself which won't be useful to beginners, but that's true of any programming book, and that's easy enough to skip over and return to later (especially with the organization of the canonical refactoring book specifically).

A beginning programmer who has learned even the simplest of refactoring techniques (extract method, insert/remove cached value, etc.) will be able to look at a piece of code and see the ways it can be changed, and will also have a reasonable idea about which changes are more likely to improve the code. They will also have the mental models and vocabulary to talk about, reason about, and understand the code, even if only to themselves. These tools are hugely important for beginners. They can transform coding from a task filled with uncertainty, fear, and irregular advancement born from experimentation to a task filled with confidence, knowledge, and curiosity.

Certainly practice a lot, but don't just blindly stumble about on your own, there's lots of good material out there, learn the techniques and then practice applying them, build up your toolkit a bit at a time until you feel more and more comfortable with coding.

</comment></comment></comment><comment><USER12> For what it's worth, it took me several years before I really understood programming. I distinctly remember thinking that I wasn't making progress, and that I was wasting my time writing silly programs that didn't do anything useful.

However, eventually things start to click (though it took me several years). You'll get to a point where things make sense, and you can fathom how you'd go about writing most of the software you use on a daily basis.

</comment><comment><USER13> It took me about 5 minutes to get started writing code.

For some people programming can make sense, for others it's just a craft that's in the hands. When I was at the university lots of people struggled with "understanding" programming and they wrote little code, trying to more to come to terms with what programming is rather than trying to do it. The people that succeeded in learning to program wrote lots of code even though it was hard to write the code and to understand. Some of the people that didn't never entered their programs into computers and just ran the code by hand on a piece of paper (to what practical use is that?).

For me programming is in the hands. When I learn a new programming language it's total chaos for 1-2 weeks and then the new regime settles and I can understand what I have been doing. After half a year of being exposed to a new programming language even more of the teachings settle and I can begin understanding more, but programming it's a practical art. I suppose it can be different if you are more mathematically minded than I am.

I suggest doing ALL the exercises in a programming book - as fast as you can without trying to really understand what is going on behind the scenes. The secret is that you don't have to really understand what the hell is going on behind the scenes, you just have to know enough to stay out of trouble and that knowledge comes from experience. In the beginning of a programming career it'll be impossible to guess what weird bugs might occur so just code and see what happens.

In short, _you have to have a lot of practical knowledge of programming to support your theoretical knowledge_ , otherwise you cannot do anything with either. A chicken and egg situation, so it's best just to jump into the deep waters and try to swim to the surface.

</comment><comment><USER14> I've got C64 and manual in German when I was 10 (I've only knew Polish at that time, but who cares :)).

For a few years I only played games, and sometimes entered some example BASIC code and tinkered with constans in code to see what will happen. I remember that my copy of manual had error in some magic graphic system initialization code, so I've never programmed graphic on C64. It was very frustrating.

Then I've got PC when I was 15 and I played with Turbo Basic, then Turbo Pascal - then I've understood variables and it all started to make sense. Since then I only feel like I know less, and less :)

PS - the most impressive thing I've seen that encuraged me to keep programming was ASCII art adventure game written in windows batch files. I've thought - <USER2> someon can do so much witch bat files, I can do everything with my knowledge of Turbo Pascal :)

</comment><comment><USER15> Even once you can write code on your own, things are painful from times to times, and I believe that's normal and a good thing.

It means you're pushing yourself out of the comfort zone, staying current.

But it's also important to detect when you should "give up" or not invest time in something that is just too painful (I personally gave up on EJB, or temporarily on C++ to go back to Pascal, then back to C++ a few years later).

</comment><comment><USER16> Don't worry, you don't become a professional programmer in one day. It's a long process.

I started programming (Qbasic) at the age of 12. My first programs were just some combinations of blocks of code taken from the help document. Until 18, I had been always an amateur programmer. Then Things changed. Programming can be flipped from fun to work. I can get paid to have fun, so why don't do it?

I was introduced to the real world and I discovered that my knowledge, as huge as it was (a little from everything) wouldn't really help building the smallest application. I also can't write code on my own. I need another application to copy from or re-use the code. My frustrations began, but they lasted short.

I started reading books. My target was Visual C#. I read a book about .Net fundamentals and another one about Visual Studio. I become a better programmer. It did took me months to understand OOP, but I finished by mastering it. And yay! I used collections.

I left Visual C# and decided to develop for the web. I planned to learn it from scratch. From the start to the end. First, I need a strong knowledge about the Client Side. That is HTML, CSS and JavaScript. The first two are somewhat easy to master and learn. JavaScript is very expressive and can take a while to master.

Actually, I felt in love with JavaScript and with it's prototypal and dynamic nature. I'm 19 and I already built 2 scripts that I'm selling on code canyon (I'm working on the third right now ;)) Suddenly while browsing on the web, I found a small niche, that can be valued to $100K/year. It's hidden somewhere and related to JavaScript. No one explored this domain (except low-quality Open Source solutions) I made my researches, grabbed a related domain and making a plan.

Learning Programming? Oups! I forgot about it!!!

</comment><comment><USER17> You need to design first - on paper, white-board, etc. You wouldn't build a house without blueprints, so why try to write a big program without sketching stuff out so that you can break down into manageable chunks.

If that doesn't help, then maybe you need to take a good CS course. If you have only programmed in C++, then it doesn't sound like a comprehensive background in CS.

<comment><USER18> Exactly this. The image of the lone hacker sitting down and pouring out a bunch of code straight from his brain is a romantic one, but if you haven't spent a little time deciding what your data structures are going to look like and how you're going to pass stuff around, etc., your code will be crap. "Just coding it" leads to both frustration as you sit wondering what you should be writing and why programming is so hard, and poor code. The poor code comes in when you start throwing in stuff like one-use elements in your structs to keep track of something you hadn't forseen, when a little bit of planning could have alleviated that.

I'm certainly not saying you should go write up a design document complete with UML and everything. That would be ridiculous, damn it I'm an engineer not a bureaucrat! Just sit down and think (on paper) about how some of the important stuff needs to look. It'll help a lot.

As for the second point, C++ does seem like a weird place to start. Go learn assembly or C. Learning to write assembly is a process of continually solving tiny programming puzzles, as you figure out how to hand-roll a loop and such.

</comment></comment><comment><USER19> I've been writing code 'on my own' since 4th grade. My school gave a class on programming the Apple IIe and I loved it. My parents bought me a series of computers, starting with a Sinclair 1000, and I wrote little programs for all of them until they weren't good enough and we upgraded. I taught myself several other forms of basic, then started on other languages like C, PHP and Cold Fusion.

Maybe you need to stop 'learning' programming and just do it. Pick a task you want to complete, possibly even a task you've done before, and just do it.

I learned all those other languages and language variants starting with the same program: Sierpinski's Triangle. Why? Because I already knew the logic for it inside and out and it was entertaining to watch. Every new language I came across, I wrote another Sierpinski's Triangle program on it as my first program.

</comment><comment><USER14> By the way, I have other problem with programming.

For some time it's not technical difficulty that prevents me from acomplishing my programming goals, but my laziness.

I am very good at learning new languages, APIs, programming techniques, etc, because that offers me fast positive feedback. I feel good because I've learned sth new.

But to achieve anything I have to sit down to real, boring work, and this I am to lazy to do. I prefer to try new cool languages than do any useful work in languages I already know. I feel worse programmer than I was when I only knew Basic and Turbo Pascal, no matter all the techniques, design patterns, languages, etc, that I now know.

Do you have similiar experiences? How do you deal with this?

</comment><comment><USER20> Can you explain how have you tried to learn? I have learned by books. Yes, it took long time, but reading a good book is both fun and productive way to learn. Unfortunately I can't recommend any of my books as they all were in Russian.

</comment><comment><USER21> Programming, as a whole, is far larger than any one person could come to comprehend in a single lifetime (imagine it being 1000x bigger). And to make matters worse, it is continually growing more complex at a rate no person could follow either!

Just when you think you've finally gotten a solid grasp on writing CRUD apps in PHP, someone shows you Haskell, or Prolog, and suddenly realized just how little you thought you knew.

That said, this all makes for programming being an excellent domain for both a career and a passionate hobby. Easy to learn (a tiny corner) and hard to master (a chunk you can really appreciate 10 years in) -- what more could you want?

<comment><USER22> Disclaimer: I am very much a novice when it comes to any kind of programming; I have only been working in PHP, which I know is considered a scripting language and not a programming language, for a few months now. My understanding is relatively limited.

"Programming, as a whole, is far larger than any one person could come to comprehend in a single lifetime (...) And to make matters worse, it is continually growing more complex at a rate no person could follow either!"

Isn't programming, essentially, the writing of instructions and providing them to systems that act upon them? Reading through that statement I wonder whether it's not _programming_ that is complex, but many problems that exist in various fields of business or study—problems that need a programmed solution.

Please—if you don't mind—would you elaborate?

<comment><USER23> _whether it's not programming that is complex, but many problems that exist in various fields of business or study_

Unfortunately, it's both. ;)

While PHP is indeed a programming language (the term "scripting language" is a fairly meaningless label) when you work in PHP building web pages you're likely to spend most of your time working on things that are computationally tractable [1], but hard because it's just hard to translate the customer's problems into code within the available budget. Your customer has a problem, it's lots of work to map that problem onto code, it's hard to explain to the customer just how much work it is to turn the "simple" activities performed by (say) their administrative assistant into algorithms, and the result tends to be expensive to document, deploy, and maintain. So, yeah, it's the problems that seem to be hard, not the "programming" -- though, in fact, there is no hard-and-fast distinction there.

But then there are problems in programming that are difficult to impossible, all by themselves. The CS folks around here can point you at plenty of them, but here's a famous one:

<http://en.wikipedia.org/wiki/Travelling_salesman_problem>

which is a member of an entire class of famously hard-to-compute problems:

<http://en.wikipedia.org/wiki/List_of_NP-complete_problems>

which (I believe) are not particularly rare, but which come up in various disguises, and which must be carefully worked around.

On a somewhat more applied level, there are lots of difficult problems in code optimization that you can work on:

<http://en.wikipedia.org/wiki/Low_Level_Virtual_Machine>

Or you can spend your day exploring a giant set of data-storage possibilities, each of which is right in its own way, and wrong in its own way:

<http://en.wikipedia.org/wiki/CAP_theorem>

[http://www.allthingsdistributed.com/2008/12/eventually_consi...](http://www.allthingsdistributed.com/2008/12/eventually_consistent.html)

One may suspect, of course, that this distinction I'm trying to draw between "difficult programming" and "difficult problems" is not real; it's just a matter of the degree of abstraction you use when describing the programming. And I think you'd be right to suspect that. Programming is programming, and programming is hard.

\---

[1] Though it is very, very possible to put something that is computationally intractable into a "simple" web page. Web pages have no upper bound of complexity.

</comment></comment></comment><comment><USER24> If you really want to badly do it, then

Be patient with yourself, don't let frustration get the better of yourself, keep trying, get immersed and give yourself some time.

For me, it took quite some time of interspersed half-hearted attempts, then accidental and incremental opportunities to do increasingly complex tasks that I could learn and scale (on different environments, SAP, NC, Excel Macros, JMP), then some big time immersion over 4 weeks with David Power's books (his style clicked for me). I am no expert now, but am doing stuff that I didnt' think I could.

Would have to disagree about the "Natural" part of your comment. Keep working at it.

Good luck.

</comment><comment><USER25> Reading that makes me think I should call my parents and thank them again for putting me in front of a Commodore PET at about 5. I may not be great at it, but programming's always seemed fairly natural to me.

</comment><comment><USER26> There are 2 aspects to programming that you might or might not be getting. First is figuring out what the solution to your problem is, Second is to put the solution on paper (write the program). Both of these take practice, but the former is much harder to learn that the latter. Most programming courses will teach you the latter. I wrote my first C program at 11, but I certainly didn't understand what that * meant next to a variable at the time, but I could think of the solution to the problem in terms of a program.

</comment><comment><USER27> I found programming a slow, grueling task until I had an ephiphany one day-- it's like learning any other [spoken] language. Now, I don't know if you're particularly adept at picking up foreign languages, but the moment I realized programming itself was the new language, I began viewing programming languages through the lens of learning a new grammar or syntax or vocabulary, and everything opened up for me. This was the same way things went with learning a foreign language--once I understood that I was still just expressing myself verbally, saying the same thoughts, it was only a matter of vocabulary, grammar, and syntax.

Since then, I have picked up new languages that interest me far more rapidly. I don't focus on how it compares to any other language I know or use. I don't focus on it from the perspective of how classes and functions differ. I look at any new programming language from a grammatical and syntactic view--and once I have read enough code & documentation to understand its grammar and syntax, I can start coding productively. That's the point I begin studying classes, functions, built-ins, libraries--the grammar and vocabulary of implementation.

I am by no means an expert programmer. I'd never call myself that. But I do find that many would be better programmers if they understood the "language" of programming. Learn as much as you can stand about data structures & types. This is core--especially types. I have so often been frustrated by inherited code that didn't show a solid understanding of data types (e.g., strings, ints, arrays, etc.). Learn about classes, functions, inheritance, etc. These are the building blocks of language, if you'll permit extending the analogy-- it's a bit like knowing how to structure a sentence, capitalize, punctuate, etc. Learn the language of programming before you ever try to learn a programming language. This is, perhaps, what you're missing. You're using a programming language to understand programming. Take a step back and understand programming itself first. Then sit back down with your language and do programming.

Regardless of chosen language, the task is the same and the result should (usually) be the same. The chosen language is really just an implementation detail. You can write a program in Ruby, Python, C, PHP, etc., and it's still going to be the same program. Most programmers, I believe, tend to choose the grammar & syntax they like best. But the job of programming remains the same.

</comment><comment><USER28> You're not going to like the answer, but:

Immediately.

Like in the first 5 minutes. When I was seven years old.

And frankly, if it didn't happen like that for you, you're pretty much screwed.

Every good programmer I've ever known started doing it young and immediately just "got it". Most mediocre programmers I know followed the path you're on, learning it in a class in school, fighting to get things done, eventually coming up with ways to solve particular problems, but never attaining fluency.

Try not to feel bad about it. It's just about the way your brain is wired. Good programmers have a specific something wrong with their brain that makes them ridiculously good at logic, and, sadly, not very good at much else. We can overcome the "everything else" part through hard work, though we'll never be as good at it as you. Similarly, you can overcome the programming part through hard work, but you'll never be as good at it as us.

Sorry to be the one to break the news.

<comment><USER29>
        Try not to feel bad about it. It's just about the way your brain is wired.

No. I spent an entire summer staring at C and getting blocked on ridiculous basic stuff because I had dumb learning techniques and kept being too ambitious. I know a solid guy who did first-year C _three times_ before he passed.

What got me through was learning to break problems up into tiny pieces, practicing and learning patterns, and ignoring advice like "if you don't get pointers straight away you'll never be a programmer".

For example, a pattern you use all the time is open a file, read some data, close the file. More than half the people I've interviewed as programmers can't do an adequate job of this from memory in their language of choice. Practice just that until you have it memorised and can type it out at speed.

Look at programs as collections of patterns, and look for excuses to practice dumb simple stuff (like scales in music). Something I knocked out over breakfast on Sunday morning to price a collection of stocks: I have a file containing a list of symbols. The program reads this data. It splits it into tokens. It uses a yahoo web service to look up prices for them. It collects the data in an object. I pass that to a formatter. Then I print it. I built each pattern independently, and then stiched them together. Some people do test-driven development to force themselves to construct software in this way, and you might find that useful (I just do it that way without formalising the tests).

amorphid wrote,

        Maybe I'm the opposite of a natural.

I felt the same for five years _after_ I'd finished my degree. Work towards mastering two things: (1) learn to reduce all problems to triviality. You can use code to feel out a problem but do not ever try to cruise through complexity - that's a path to certain failure. (2) Hone your tools (including your memory for patterns) so that your cognitive load can be dedicated to problems at hand rather than typing or looking up patterns for bread-and- butter stuff like reading the contents of a file.

amorphid - I don't know what your problems are specifically but maybe some of that will be useful.

Edit: I made a claim at the top that I couldn't reference. Removed.

<comment><USER28> _I spent an entire summer staring at C and getting blocked on ridiculous basic stuff because I had dumb learning techniques and kept being too ambitious. I know a solid guy who did first-year C three times before he passed._

Sounds like we're just using different definitions for "good". You seem to define it as meaning competent, so yes, you and your friend fall into the category of people who have successfully taught yourself to program computers despite not being wired to do it.

I was talking about the Fred Brooks 10X types when I said "good". Those guys didn't drop Comp Sci 101.

Again, please try not to take it personally. They're not better people than you. They just took to computer programming like everybody else takes to breathing.

<comment><USER30> There's no magic wiring there - humans don't speak computer out of the womb. Some people start programming at a younger age than others. Some move on, some stick, some take it more seriously, some go on to become great.

It's like any other thing really. Football, Soccer, Jiujitsu, Ping-Pong, etc.

</comment></comment></comment></comment><comment><USER31> Work on something useful, something that has a goal.

Beating your head against a problem for hours is the best way to learn something (because you learn all the ins and outs of that thing, not just the part you were working on).

</comment><comment><USER32> Can you define what you mean by 'on your own'?

<comment><AUTHOR> Picked up a few books, wrote basic programs, etc. When it got harder, found ways to ask people questions. I usually get frustrated when it comes to solving puzzles that aren't linear programs.

<comment><USER32> What is causing the frustration?

<comment><AUTHOR> I can see the solution in my head as a picture, not words. Maybe I need to practice framing problems more.

<comment><USER33> That's interesting, and actually quite encouraging: it suggests that you do think in terms of abstractions of the problem you're trying to solve, which is arguably the most fundamental skill in programming. If your difficulty is that you haven't got the mechanical process of turning your thoughts into code down yet, that's a much easier thing to overcome.

Could you share with us what books and programming languages/tools you've been using? While there are certainly common ideas, different types of language take a different approaches to describing a program. Maybe whatever you've chosen doesn't suit your way of thinking particularly well, and you would find another tool more intuitive at this stage.

<comment><AUTHOR> The book I've had the most luck with is _Learning To Program_ by Chris Pine. There's a question in the book about counting the sections of land on a standard X,Y grid map. That would be a good example of a problem that blows up my brain.

<comment><USER33> Which of these would you say is closest to your difficulty?

a) You don't understand what the problem means.

b) You can't describe an algorithm that would solve the problem in plain English or "pseudocode".

c) You could describe the algorithm informally, but don't know how to code it.</comment></comment></comment></comment></comment></comment></comment>


Image-to-Image Translation with Conditional Adversarial Nets - <AUTHOR> https://phillipi.github.io/pix2pix/ <comment><USER2> The "sketches to handbags" example, which is buried toward the bottom, is really cool. It's basically an extension of the "edges to handbags," but with hand-drawn sketches.

Even though the sketches are fairly crude, with no shading and a low level of detail, many of the generated images look like they could, in fact, be real handbags. They still have the mark of a generated image (e.g. weird mottling) but they're totally recognizable as the thing they're meant to be.

The "sketches to shoes" example, on the other hand, reveals some of the limitations. Most of the sketches use poor perspective, so they wouldn't match up well with edges detected from an actual image of a shoe. Our brains can "get the gist" of the sketches and perform some perspective translation, but the algorithm doesn't appear to perform any translation of the input (e.g. "here's a sketch that appears to represent a shoe, here's what a shoe is actually shaped like, let's fit to that shape before going any further"), so you end up with images where a shoe-like texture is applied to something that doesn't look convincingly like a real shoe.

<comment><USER3> This is be a popular shopping website. Sketch your perfect handbag. See an image of the product. Click to buy.

<comment><USER4> "Sketch your perfect handbag" may be a bit much to ask of most people.

<comment><USER5> Draw your perfect handbag to share with friends. you only need 10 buyers to have it created.

<comment><USER6> I doubt friends want the same handbag through! It's an anti-viral feature: Personalization.

</comment></comment></comment></comment></comment><comment><USER7> Truly impressive overall. Unfortunately, it looks like training set was way too small. Look for example at reconstruction of #13 here:

[https://phillipi.github.io/pix2pix/images/index_facades2_los...](https://phillipi.github.io/pix2pix/images/index_facades2_loss_variations.html)

Notice white triangles (image crop artifacts) present on the original image, yet completely absent on the net input image. They make re-appearance on the output of 3 (4 even?) out of 5 nets despite the lack of corresponding cue in the input image. Looks like network cheated a bit here, i.e. took advantage of small set size and memorized the input image as a whole. Then recognized and recalled this very image (already seen during training) rather than actually reconstructing it purely from the input.

Same (but less prominent) for other images where "ground truth" image was cropped.

</comment><comment><USER8> Just want to throw out that none of these applications are new. What is novel about their approach is that, instead of learning a mapping function using a hand-picked function to quantify accuracy for each problem, they also have a mechanism for choosing the function that quantifies accuracy. Haven't grokked the paper to see how they do it, but that is pretty neat IMO.

</comment><comment><USER9> Interesting.

What I like about the "Day to Night" example is that is clearly demonstrates that these sort of networks lack common sense. It expects light to be where they are clearly (to humans with common sense at least) no things that can produce light. E.g. in the middle of a roof or in a tree. Of course, there can be, but it's fairly uncommon.

And the opposite as well, no lights where a human would totally expect a light, eg. in the front of buildings or on the top of, well, lighting poles.

<comment><USER10> I'd guess the problem is that the daytime pictures allow for easy feature detection (tree, building etc) but the nightime pictures are washed out- We humans look at the daytime picture first, then say "that nighttime picture must have a tree there" which involves feature detection across both pictures (in the training phase)

I suspect a neural network better specialized for this task (i.e. that has the data interlaced for both day and nighttime during training) would have no problem feature detecting trees and leaving them unlit.

</comment></comment><comment><USER11> This is awesome!

Makes me wonder how this can apply to image and video compression. You could send over the semantic segmentation version of an image or video, and system on the other end would use these technique to reconstruct the original.

<comment><USER12> You can perform extremely good compression this way, but the computational and energy cost would be prohibitive.

There are even more traditional tricks that don't make it in things like H.265 because it is too costly.

</comment></comment><comment><USER13> Does anyone else have the feeling that with the current trajectory, something exactly like this, but with perhaps a million times the amount of feedback and data, _thought_ will just _emerge_? Yes, this is all 2D and abstract/selective training sets etc, but what if AI is the ultimate fake-it-until-you-make-it?

<comment><USER14> I don't see this happening. What I do see happening, is it figuring us out. Somewhere out there, there's a function which explains how exactly our society is completely organized in every way.

From that, the AI could generate books, movies, and do a lot of things.

<comment> rm_-rf_slash Reminds me of the novel-rewriting-apparatus from 1984, except with more friggin' superheroes and remakes.

</comment></comment></comment><comment><USER15> The Aerial-to-Map example looks like this may be useful for automatic map/satellite rectification/georeferencing, but not sure how efficient it'd be if it has to compare against a large area.

Does anyone have any experience in this area?

</comment><comment><USER16> I feel this can potentially revolutionize creative processes, for example in the clothing industry. You just draw up a purse or a shoe, let the machines generate dozens of variants (with pictures), and then you only have to filter and rank them.

You can pipe these product sketches directly into focus groups who tell you which product is most likely to sell. You don't need massive staff to come up with product variants any more.

<comment><USER17> I feel like we would end up here: [http://www.gianlucagimini.it/prototypes/velocipedia.html](http://www.gianlucagimini.it/prototypes/velocipedia.html)

<comment><USER18> I wonder if you were to average the design of the bicycles whether it would actually produce something that works?

<comment><USER19> I would have thought that, if you are smart enough to find a "bicycle vector space" in which averaging sketches of a bicycle produces another valid sketch of a bicycle, then you probably already know enough about bicycles to design one without the input of imperfect sketches.

</comment></comment></comment></comment><comment><USER20> Besides a cool new application of GANNs, I don't see if this architecture is much different than normal GANNs. Anyone else have thoughts?

</comment><comment><USER21> I wonder how well this scales to a larger domain of interest. So, e.g., if the neural net needs to know not only about cars and nature, but about more topics such as people, faces, computers, gastronomy, santa claus, halloween, etcetera, how does the neural net scale? And how should its topology be extended under such scaling?

<comment><USER22> It's being researched with great interest. Building models from text and images, describing internal structure and relations between objects, building rich prior knowledge about the world in order to do inference and guide behavior.

I see lots of papers that go in this direction, of creating a rich, semantic, predictive representation of images, video and text and then using it as the basis for reinforcement learning. Learning to understand the world and to act based on that understanding.

</comment></comment><comment><USER23> Kudos for providing proper examples of the network doing its thing, both good and bad. This is what all researched ought to do. Too many papers these days handpick a couple coolest looking results and stop at that.

...

I get a feeling this could be used in game design to do some really cool stuff with map and texture generation.

<comment><USER24> It could reduce the game size way down if it can generate textures on-the-fly.

</comment></comment><comment><USER25> I'm enrolled in Efros' computational photography course this semester, and Tinghui and Jun-Yan are the GSIs. It's fantastic to experience the bridge between teaching and cutting-edge research!

</comment><comment><USER26> This is an absolutely incredible result. All of this stuff would be considered insanely advanced AI ten years ago, but now we look at it and say "this is just stuff computers can do".

We've got the pieces of visual processing and imagination here and the pieces of language input/output as part of Google's work. It feels like we just need to make some progress on an "AI executive" before we can get a real, interactive, human-like machine.

</comment><comment><USER27> I'm interested in having a play. As an out and out ML newbie, is there such a thing as an AWS image I could run on a GPU instance and then just git clone and go?

<comment><USER28> Try one of the bitfusion AMIs on a g2.2xlarge instance.

<comment><USER27> Thanks very much. If anyone else is interested I can confirm that the Bitfusion Boost Ubuntu 14 Torch 7 AMI on a g2.2xlarge instance does offer a relatively painless way to get going with this, although I couldn't get the python image combiner to work so had prepare those separately. Have just trained my first neural net, most exciting!

</comment></comment></comment><comment><USER29> Neural nets! Is there anything they can't do?</comment>


Ask HN: What online communities offer a high level of discussion? - <AUTHOR> One of the things I enjoy most about Hacker News, is the level of discussion.
I would define 'level' in this case to mean:
1) Generally, discussions are analytical, emphasising reasoning and evidence
2) Submissions and discussions deal with topics that are intellectually stimulating
3) Many commenters show a high level of expertise around a topic - these comments often float to the top
4) For the most part, people are civil. Those who are uncivil are usually downvoted
Admittedly, this is much easier to foster with a community discussing technology, science and math (with a sprinkling of news/current affairs)
I often use HN as my 'filter' to decide what is interesting, and to observe and engage in discussions that offer multiple perspectives on a topic. It's a much better filter than a social media news feed.
I'd like to find other intellectually stimulating communities -  perhaps with a broader range of topics under discussion than the technology/science bent of HN, but  having a similar 'level' of discussion. <comment><USER2> Honestly, almost any hobby with depth has one, but I know of no good generalist sites.

Here is a good example;

Bobtheoilguy - Forum dedicated to automotive lubricants. Some very in depth analysis and company insiders on occasion. Many users regularly send in oil for testing and post results. Great for info on the changing formulations of oil standards, and common additive packages. Very useful for me, owning old and new cars and bikes.

<comment><AUTHOR> _I know of no good generalist sites_

Agree with this, unfortunately

</comment></comment><comment><USER3> [http://reddit.com/r/askhistorians](http://reddit.com/r/askhistorians) is a favourite of mine!

<comment><USER4> When I first found this thread it spurred me to create a Reddit account to try and aggregate subreddits like it and only see those. Sadly I found this is the only subreddit with a) low volatility, high-quality content, b) not infested by memes, and c) decent volume of high quality content.

I subscribed to a bunch of other more domain specific subreddits, but as far as I can tell /r/askhistorians is an anomaly. Which, of course, manages to keep me coming back to Reddit, whose culture I hate.

<comment><USER3> Askscience isn't that bad, either!

</comment></comment></comment><comment><USER5> A few days ago I saw a link to [https://stackexchange.com/](https://stackexchange.com/) on the HN frontpage. Didn't know this site before (although it in fact seems to be the parent of stackoverflow or at least somehow related) but it looked as if it might fit your description.

<comment><USER6> Stackexchange (including stackoverflow) have the highest quality discussions I've found anywhere. (Try physics, for example!) This is in part maintained by the high quality of their community platform. I just wish all news + commentary had to run through such a system. If I were a Benevolent Dictator, they'd control the Media.

</comment></comment><comment><USER7> I'd be wary about recommending Reddit communities in any form given how utterly compromised the site is in terms of corporate and political interests groups + financing.

<comment><USER8> I was looking through /r/all yesterday, it's impressive how partisan it has become.

In my view the single biggest job in Silicon Valley that nobody is taking seriously is the role of moderation. It's nearly impossible to do properly and yet there doesn't appear to be another choice.

<comment><USER9> Absolutely agree. I used to like to check /r/all for a more rounded view -- but I don't get that anymore. And apparently they're planning to move toward more location-specific view -- which will only make the problem worse.

It's not an easy problem to solve, I guess. I think Google is trying to make some inroads with Google News? But even then once you start personalizing the content, you're only going to see sources you like.

<comment><USER10> I'm not sure how that's a problem. Presumably I like the sources I deem to be of a certain quality. I don't want to see the stuff I don't like because it's probably not at the standard of quality I expect.

The reason nobody's solved the "moderation" problem is because it's the wrong abstraction or the wrong problem to solve. The problem to solve is how to make filtering and discovery better.

</comment></comment></comment></comment><comment><USER11> Contrary to what some folks are saying here, I am having a surprisingly positive experience on Reddit. My initial experience was negative. I left for three or four years and went back a few months ago.

So, I think, to some extent you need to find subreddits that interest you and figure out how to effectively interact with them. Reddit is really a conglomeration of subforums, each owned and run by different people. It isn't the monolith some people paint it as. If you try to interact with like it is a monolith, that probably won't work well.

You can also brew your own on Reddit. If you want high level discussion on certain topics and can't find it, you can create your own subreddit as you see fit. Unlike starting a separate forum, the fact that it is on Reddit will allow you to attract some traffic organically. There are already members there who can post, comment and vote.

</comment><comment><USER12> Metafilter.com is a hidden internet gem.

<comment><USER11> If you don't mind toxic misandry* and classism, among other things.

If you are comfortably well off and agree that hetero men are all inherently rapey bastards who should feel guilty for existing, hey, go for it.

* [http://micheleincalifornia.blogspot.com/2014/11/having-sad.h...](http://micheleincalifornia.blogspot.com/2014/11/having-sad.html)

<comment><USER13> If you're so anti-Mefi, why do you continue to take advantage of the site's resources, including posting questions to AskMe? Why not just disable your account?

<comment><USER11> _anon354987 10 minutes ago [-]

If you're so anti-Mefi, why do you continue to take advantage of the site's resources, including posting questions to AskMe? Why not just disable your account?_

Funny how mefites who want to attack me some more never want to do it in their own name. Whether harrassing me on my blogs or here, it is always anonymous.

I rarely post anything there anymore. I did post something yesterday. I am kind of regretting it.

I dislike letting assholes win by default. I like to imagine that taking the high road will work. I am also medically handicapped, so sometimes I just do stupid things because I am feverish or whatever.

But, I participate less and less. My profile there bears that out.

</comment></comment></comment></comment><comment><USER14> For personal finance and investing, the Bogleheads forum ([https://www.bogleheads.org](https://www.bogleheads.org)) ticks all the boxes. It definitely has many helpful, knowledgeable participants. Since it's a traditional forum, they maintain civility through moderation, but it isn't needed often.

<comment><USER15> Related, Fatwallet Finance also has a pretty decent discussion that spans churning rewards, real estate, and general investment discussion.

[https://www.fatwallet.com/forums/finance](https://www.fatwallet.com/forums/finance)

</comment></comment><comment><USER16> /r/changemyview is well moderated and has interesting topics from time to time

<comment><USER17> /r/neutralpolitics might be of interest too.

<comment><AUTHOR> Thanks, I had a feeling some sub-reddits would be a good source. The breadth of the spectrum in sub-reddit discussion quality is quite impressive.

</comment></comment></comment><comment><USER18> I still find interesting discussions in [https://slashdot.org/](https://slashdot.org/)

<comment><USER19> Man, haven't been on /. for a long long time. Thanks for reminding me to go log back in again.

-Member of the five digit UID club

</comment></comment><comment><USER20> This may not be exactly what you are looking for, but one thing that increased my enjoyment of reddit and twitter was making heavy use of lists and multireddits and unsubscribing from things I didn't want to see without looking for.

For example, I was subbed to a half-dozen Diablo related subreddits that were more popular than some of the smaller subreddits I was interested in. This meant that my homepage was cluttered with posts from those subreddits. Therefore, I made a Diablo multireddit and ubsubbed from the Diablo related subreddits making my homeoage a bit cleaner and it has the added benefit of concentrating the Diablo information when I am looking for it.

I also do this in an inverse manner. For example, I'm still subscribed to the team subreddits of sports teams I follow, but since they tend to be small, I have them lumped into a "My Teams" multireddit where I can easily check what is going on for the half-dozen teams I _really_ care about.

The use of multireddits has greatly improved my reddit experience.

</comment><comment><USER21> I can recommend Slate Star Codex [1]. There is no voting system, but the level of discussion is above 99% of what you find on the Internet, plus the commenters come from a _very_ wide range of the political spectrum.

Discussions are mostly about the articles that Scott Alexander posts, but there are open threads twice a week (just click on "OPEN THREAD" in the top menu bar to go to the most recent one).

[1] slatestarcodex.com

<comment><USER22> There's a weak post at the top, I'd start with a few of the 'Top Posts': [https://slatestarcodex.com/about/](https://slatestarcodex.com/about/)

<comment><AUTHOR> Thanks, the content seems interesting (although the layout of the site I find a tad confusing).

</comment></comment></comment><comment><USER23> Depending on your interests any decent hobby/professional forum should have a high level of discussion similar to how HN is mostly oriented towards tech. Do you have non-tech interests and if so, what are they?

<comment><AUTHOR> Several sports, philosophy and literature.

The general trend from responses is that there are many specialist communities that foster decent discussion. However, 'generalist' forums of a high quality are hard to find.

<comment><USER20> Generally speaking, I have yet to find a solid sports forum. The best I have found so far is /r/AFL. Occasionally, team subreddits are okay, but they can range from dead to meme-tastic.

The _best_ solution I have found for sports is twitter. I found other (reasonable) fans and can interact with and follow whomever I choose. The downside to twitter is it takes time to figure out who to follow. Also, the more people you follow, the more noise that creeps in. This is why I make heavy use of muting by keyword. It is my feed. I don't have to listen to you talk about things I am not interested in.

</comment></comment></comment><comment><USER24> Motley Fool ([http://boards.fool.com/](http://boards.fool.com/)) used to have fairly intelligent forums. I haven't really hung out there since the Dot Com days; just checked and there are some interesting postings.

I fear that the big socials like FB have crowded out the traditional forums. People just don't have the time for all of this, so they default to the low hanging fruit.

There are a few interesting suggestions in this HN topic; will check them out as time allows.

</comment><comment><USER25> Specific somethingawful forums are still pretty good surprisingly

</comment><comment><USER26> I also frequent:

[https://gyroscopicinvesting.com/forum/index.php](https://gyroscopicinvesting.com/forum/index.php)

It's a forum mostly about Harry Browne's Permanent Portfolio concept, but there is also good discourse on current events in the "Other Discussions" forum.

</comment><comment><USER27> Well curated twitter (believe it or not). I follow Bitcoin experts on twitter and find it intellectually stimulating.

<comment><USER28> Mind to share the list?

<comment><USER27> just follow whalepanda

</comment></comment></comment><comment><USER29> If you like video games, [https://reddit.com/r/truegaming](https://reddit.com/r/truegaming) is a good one.

From the sidebar description: /r/truegaming is a subreddit dedicated to meaningful, insightful, and high-quality discussion on all topics gaming.

</comment><comment><USER30> For digital security stuff I like

[https://tinfoil.press](https://tinfoil.press)

</comment><comment><USER31> Kialo looks really interesting.

[https://www.kialo.com](https://www.kialo.com)

<comment><AUTHOR> I'm glad they're pursuing this. I wish more startups would tackle the problem.

</comment></comment><comment><USER32> I'm looking for high-quality message boards on libertarianism and political science in general. I know some in my mother tongue (french) but haven't had much luck on the english-speaking web.

</comment><comment><USER33> [https://www.jqbx.fm](https://www.jqbx.fm) if you want to talk & learn about music.

</comment><comment><USER34> [http://lambda-the-ultimate.org/](http://lambda-the-ultimate.org/)

</comment><comment><USER8> Other civil/intellectual communities I've found interesting or useful include:

slatestarcodex.com

kk.org/cooltools/

reddit.com/r/audiodrama

It seems easier to find good narrowly defined communities than ones with broad reach. This is probably because of politics - it acts as a synaptic damper no matter how high your IQ is.

</comment><comment><USER35> The slatestarcodex.com community might be interesting for you.

</comment><comment><USER36> I got this one:

4chan.org/g/

<comment><USER37> I feel like most of 4chan's special interest boards are good if you can sift through them. I wouldn't say it's in-depth all the time but if you lurk enough and come across a good thread it can actually be pretty informative. Even asking questions in a thread is relatively guaranteed to get a response, albeit may not be the response you want, but they're generally helpful if you're on topic.

Also, lainchan.org is pretty top tier if you want a more tech oriented chan.

</comment></comment><comment><USER38> /r/the_donald

Haha sorry just kidding, I'll leave.

</comment><comment><USER39> I have one site that checks all these boxes and I love it.

And I'd never post the link to a HN thread. A good culture and community is a fragile thing.

<comment><USER40> thanks for your worthwhile contribution to this thread!

<comment><USER39> I knew it would be unpopular. But communities aren't like cool articles. You cannot just share them with anyone without affecting their quality and nature. There's a reason that fraternities and such work on an invitation-only system.

<comment><USER41> It's easy to see why you wouldn't post the link to it. It's hard to see why you would post a comment on it regardless.

<comment><USER39> Maybe I could have said it less bluntly, but I replied because I favor honest discussion over silence. If I'm going to not do someone a favor, I think it's better to say why than to ghost them.</comment></comment></comment></comment></comment>


Better Genderless Pronouns in English - <AUTHOR> https://stallman.org/articles/genderless-pronouns.html <comment><USER2> I like the singular they; it can be easily integrated and isn't a radical change as "pers" or other similar neologisms. Anyone will understand what you mean, whereas they will have to look up the meaning of "pers".

rms writes that this "violates the grammar of English so deeply that it feels terribly wrong"; I don't see how; the grammar of most languages is inconsistent anyway. Perhaps it doesn't feel as "wrong" to me as I'm not a native English speaker, or because I'm younger.

He is right that it can be used in confusing ways, but the same holds true for a lot of language. "It depends on what the meaning of is, is", and all that ;-)

Either way, it seems fairly clear to me that the singular they is the way to go for gender-neutral language in the foreseeable future. Is it perfect? Perhaps not. But it's practical, achievable, and a good improvement over exclusively using "his" or using the clumsy "his or her". Don't let perfection be the enemy of good!

<comment><USER3> I don't see how either considering using singular they goes all the way back to Chaucer or earlier (1400s).

<comment><USER2> I'm not 100% sure if I understand your comment (it's a bit confusing), but as I understand it using the singular they as a pronoun is fairly new, even using the singular they in other contexts isn't. This is what I meant with "singular they" (perhaps I should have been clearer about that).

<comment><USER3> It's only new, as I understand it, as a _non-binary_ singular pronoun. Many of those contexts have also been used for a very long time as singular pronoun where gender isn't at present relevant, was clarified elsewhere or in person. An example.

I might send out a mail about Dave, the new hire, and introduce _him_ in my opening sentence. I might write every subsequent sentence and paragraph with they where gender is neither stated nor implied. This is a form we're perfectly comfortable with, used to and doesn't break any grammatical law. They will be starting on Monday. Their desk will be the free one by Alice. etc. There are one or two contexts where we're not used to seeing it, so its use may seem contrived or unnatural.

The only difference as I see it, thanks to the recent rise of non-binary identity, is a wish for some not to ever have someone use he or she in their context. i.e. They always prefer "This is Bob, they started this morning and they will be taking the desk next to you" over "This is Bob, he..."

That, I suspect, is why some might dislike they. It's already natural in many contexts, but it's also natural to drop to he/she in a few other contexts. So it may inadvertently encourage accidental use of a non-preferred pronoun in a way that an impersonal it, or per would not.

</comment></comment></comment></comment><comment><USER4> I've written about this topic myself, though the piece I have in mind is probably not online anymore. No one particularly cares what I think because I'm not famous.

I find myself wondering exactly why we should particularly care what Stallman thinks. Because he's famous? I see no reason to think that the area of expertise that makes him famous somehow qualifies him to decide what's best here.

Granted, to some degree, it's framed as "This is what I do." But he knows many people will read it and take it seriously simply because he's famous.

Anyway, I have found myself tending towards using fewer pronouns and, as above, more frequently reiterating the name or descriptor of the person in question. I also tend towards use of singular _they_ and rewriting sentences to sidestep such issues. It's hard at first, but, like any habit, gets easier over time.

An example is to say "whether you are a manor not" rather than to say "whether you are a man or a woman." The second phrase not only that excludes non-binary individuals etc, it is also agist: It excludes _boys._ The first phrase elegantly sidesteps all those issues.

It's often a case of _less is more._ Trying to actively be _inclusive_ is typically a worse solution than trying to avoid being _exclusive._ Just don't implicitly exclude various categories rather than trying to figure out all the things you ought to include.

<comment><USER5> I am not sure how often a person blog posts are posted on HN but I find it fairly common. HN do not follow the same rules as Wikipedia when it comes to judge whose opinion is worthy to be considered, neither requiring expert recognizing in the topic or third-party sources. It simply a question if enough people find the topic interesting within the time frame that a article has to be pushed to the front page.

On the topic itself, I find from experience that people tend to default a pronoun as to themselves when they don't know the gender of a person and there is no other social clues. I prefer to not attribute malice to that which has a equal likely natural reason, and defaulting to oneself is a rather good explanation for why groups with mostly single-gender tend to use a pronounce of that gender. For that I agree that fewer pronouns, "they", and "person" is more clearer and honest than defaulting when one do not know the gender.

</comment></comment><comment><USER6> That solution ("per, pers") is as artificial and contrived as "zhe, ze" or other invented words. Will never get traction.

</comment><comment><USER7> Using "they" in the manner he describes, and gives examples of, is indeed wrong. But that does not mean that it's bad, it only means that using "they" is not a _drop-in replacement_ for traditional gendered pronouns. Using "they", you simply have to construct your sentences so as to avoid any ambiguity.

English speakers managed this transition once before with the abandonment of "thou" – many sentences which were previously comprehensible with "thou" would be unclear or downright misleading if "thou" were simply replaced with "you". But the modern speaker has no problems with using only "you". Why? It's because they are _aware_ of the ambiguity and structure their sentences accordingly.

Don't simply treat "they" as a drop-in replacement, just use it, and get used to writing a bit differently. Yes, it's a slightly different language that what you were used to. Languages change.

</comment><comment><USER8> In english, I find that few ideas advocated for get traction. The example of this is the US editorialist in newspapers across the turn of the 19th century who advocated for spelling reform and made the newspaper follow his lead. Once he died, the paper quietly reverted to something closer to "queens" english (and I don't mean the suburb of New York)

</comment><comment><USER9> urgh. stick to emacs and the gpl, please.

<comment><USER10> Stallman has always been eccentric but I don't see how writing inoffensive political manifestos on your personal website that nobody reads is hurting anyone.</comment></comment>