Four years with Rust - <AUTHOR> http://words.steveklabnik.com/four-years-with-rust <comment><USER2> Rust as a language is now realizing the benefits of borrow checking. As the article points out, the syntax doesn't have to distinguish between move and assign. The borrow checker will catch a reuse of something already moved away. This turns out to be effective enough in practice that the syntax distinction isn't necessary. That wasn't obvious up front.

Not having exceptions tends to generate workarounds which are uglier than having exceptions. Rust seems to be digging itself out of that hole successfully. Early error handling required extremely verbose code. The "try!()" thing was a hack, because a expression-valued macro that sometimes does an invisible external return is kind of strange. Any macro can potentially return, which is troublesome. The "?" operator looks cleaner; it's known to affect control flow, and it's part of the language, so you know it does that. Once "?" is in, it's probably bad form for an expression-valued macro to do a return.

There's still too much that has to be done with unsafe code. But the unsafe situations are starting to form patterns. Two known unsafe patterns are backpointers and partially initialized arrays. (The latter comes up with collections that can grow.) Those are situations where there's an invariant, and the invariant is momentarily broken, then restored. There's no way to talk about that in the language. Maybe there should be. More study of what really needs to be unsafe is needed.

<comment><USER3> > There's still too much that has to be done with unsafe code. But the unsafe > situations are starting to form patterns.

I think as long as those patterns can be abstracted out and moved into thoroughly-vetted libraries with a safe interface, unsafe code isn't really a problem. I expect that getting Rust's standard libraries to a place where regular applications very rarely need to create their own unsafe code blocks is going to be a major long-term effort.

(Of course, if there were some simple language feature that would make some common use case of unsafe code blocks unnecessary, by all means we should do that as well.)

<comment><USER4> Agreed. And considering that the most common uses of unsafe are for collections, I think a limited number of vetted libraries completely realistic.

Rolling your own collections is typically not that great anyway; how much better is your linked list/hash table/skip list than everyone elses?

<comment><USER5> As long as there are 40+ collections data structures like in Java.

</comment></comment></comment></comment><comment><USER6> For those of us who are getting to the party 3 years late, thank you.

Just my 2p for others learning: for me, Rc::RefCell was what I was missing, even after I thought I was up to speed. I was fine using Channels for inter- thread communication and I never needed Arc, but use of Rc is common in the Rust ecosystem and a lot of my early fights with the borrow checker weren't fights I needed to have. In situations where it wasn't a trivial change, and I found myself banging my head against the wall, it was often because I was in a situation that called for a reference counted cell.

<comment><USER7> Reference counting can be a useful memory management technique. But reference counting may cause unpredictable pauses when large amounts of objects suddenly need to be freed (e.g. when dropping the last reference to a large array holding many references).

At least a carefully written garbage collector can free objects incrementally, and concurrently.

So memory management in Rust is certainly not a solved problem.

EDIT: Removed mention of RefCell.

<comment><USER8> > But reference counting may cause unpredictable pauses when large amounts of > objects suddenly need to be freed (e.g. when dropping the last reference to > a large array holding many references).

That's still a predictable pause: it's the number of references contained within the array. If you know your array will hold at most ten references, it will take at most the time to free the ten references. Also, you know this will happen when the last reference is dropped - no earlier, no later. If your program can't handle the pause at that moment, you hold the reference until it can. If you know another component (perhaps in your own call stack) holds a reference, you know it won't be freed. And so on.

<comment><USER7> > If you know your array will hold at most ten references, it will take at > most the time to free the ten references.

True. But if those references themselves contain references, it may become tricky to manage all of this. You basically don't want to think about it.

But, like others mentioned, you _can_ put the objects in a queue, and free them in the background. It would be interesting to know how such a solution stacks up, performancewise, against an incremental, concurrent garbage collector.

<comment><USER9> Note that you don't need a GC to do that; the allocator can do it for you.

A lot of folks think that optimizations like having allocation arenas and spreading out deallocation pauses are unique to garbage collectors, but they're completely orthogonal to GC. You can have GCs with these optimizations, and GCs without. You can have regular allocators with these optimizations, and regular allocators without. Jemalloc does have arenas and stuff for allocation (I'm unsure if it spreads out deallocation loads). Of course, with a GC you can also defer the cost of iterating through large vectors and calling destructors.

But anyway, this only becomes a problem when you have large complicated Rc- trees in your application, which tends to not be the case in Rust.

<comment><USER10> An exception (large complicated Rc-trees) is the rope in xi-editor. If you load a very large file, the operation of letting go of the last reference is potentially a large enough pause to have an effect on UI responsiveness. I've considered adding a mechanism that moves the object into a deallocation thread (or a deallocation task running in a thread pool) for this reason, although I'm not sure how important it is in the grand scheme of things.

In a GC'ed language such as Go, this would not be a problem. The flip-side is that I can safely and efficiently do updates in place, because Rust's reference counted type has a way to determine when you're holding the only reference.

<comment><USER11> > I've considered adding a mechanism that moves the object into a deallocation > thread (or a deallocation task running in a thread pool) for this reason, > although I'm not sure how important it is in the grand scheme of things.

The one time I've done this in C++, delayed deallocation actually made major loads/unloads worse for us on mass batch operations - more cache thrashing perhaps? Since this involved GPU resources, perhaps some bad interaction with the driver? I did keep around the "optimization" _conditionally_ for smaller operations as this let us get rid of some hitching.

> In a GC'ed language such as Go, this would not be a problem.

In C# this traditionally manifested as lengthy GC pauses you had to jump through hoops to workaround. Modern GCs are much better these days, but it's not 100% solved.

<comment><USER12> Hmm, yeah cache thrashing sounds a likely culprit - agreed. Perhaps before dropping all the references they should be sorted by memory address, so that page faults are minimised.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> Wow, four years already. Maybe you can help settle this question I've had. I'm a rubyist (like you were/are, and wycats, and a bunch of rustaceans), and I think that sort of drove my interest in rust.

But after 4-5 years of ruby the dynamism which initially was super cool, has grown a little frustrating and I long for a more sophisticated type system and a compile step, since frustrating bugs crop up from time to time that would be caught by that, and which slip through a hole in our test suite.

I've dabbled in Haskell and Rust and the whole "if it compiles it's likely to work, or at least the bugs will be significant logic ones" aspect of them is very cool.

I wonder, though, if the flipside is true? Maybe people who have a compiler and strong type system get frustrated with its rigidity over a number of years, and when they see ruby for the first time are blown away with what it can accomplish. After all, it took a number of years day in and day out with ruby to start seeing its blemishes, I wouldn't be surprised if the reverse were true.

So as someone who's now spent 4 years in the other grass, do you still find it greener? (Or am I wrong from the start, and maybe you like Rust for other reasons and its type system wasn't something that attracted you to it over ruby?)

<comment><USER14> Are you talking about strong typing or static typing? I've been using statically typed languages for 20 years (C++, Java, Objective-C) and I haven't gotten tired of it yet. Especially when working in a large code-base I didn't write, Python is rough. What's a "session"? Who knows, guess I'd better put `print type(session)` and figure out how to get that function executed.

Although, the thing that bothers me about Python (haven't used Ruby) is the fact that it is interpreted. It's really annoying to have to run my program to discover syntax errors and typos, when a compiled language would do that for me. With interpreted and dynamically typed languages, you have to have 100% test coverage, because you have no idea if your code is even syntactically valid until you run it, and of course if it isn't valid, then you throw an exception. (Hopefully that crashes the program, unless someone was brilliant enough to catch all exceptions and not print any error messages, then it looks like everything worked fine until you discover it didn't.) So every change is a potential for an exception, until you execute that line of code to make sure there wasn't a misspelled variable name or something.

So, yeah, I love the compiler. (I also love Python for scripty stuff.)

<comment><USER15> > until you execute that line of code to make sure there wasn't a misspelled > variable name or something

But isn't it the purpose of tools such as IDEs? PyCharm is pretty damn good at it. Of course, it's not always possible or convenient firing up an IDE. But I suppose editors such as vim should be fully capable of doing this via plugins as well.

<comment><USER12> The best use case I know of is avoiding the common Python & Ruby pitfall of "just stick everything in a dictionary and index it by key". Welp, forgot to update every instance of that string index (particularly if that name overlaps with anything else, including variable and function and class names... so, like, a lot of the time).

</comment></comment></comment></comment><comment><USER16> As a relatively new Rustacean (since May 2016), I have to say that Steve has been one of the most influential people on my Rust coding style and understanding of the importance of community in a language. Prior to talking with Steve on IRC, I believed that community was secondary to language quality, but now I fully understand the importance of strong community in a programming language.

<comment><USER17> I've moved away from Rust lately (long story), but in my attempts to move to Rust i was blown away by Steve. His presence in the Rust community is staggering, and his efforts truly made a Rust newbie like myself feel very welcome.

</comment></comment><comment><USER18> Many thanks to the Rust team and the Rust community!

Also, retrospectives and posts where a core contributor summarizes the achievements and accomplishments of the previous few years are extremely valuable. These days software and tools evolve really fast and old resources fall off the face of the earth for a various reasons, and it's important to understand how things used to be and how we got to where we are now.

<comment><USER19> I learn something new about rust, eg. irrefutable patterns as function argument in the blog.

PS: I do not understand what irrefutable patterns means, so I google.

[https://www.haskell.org/tutorial/patterns.html](https://www.haskell.org/tutorial/patterns.html)

in case anyone do not know yet.

</comment></comment><comment><USER20> I really like the premise of Rust. Keep at it. For my purposes, it's still a bit too immature. Last time I looked at the big 7 things, most were still not done.

[https://mail.mozilla.org/pipermail/rust- dev/2014-June/010139...](https://mail.mozilla.org/pipermail/rust- dev/2014-June/010139.html)

The RustDT plugin for Eclipse makes the edit/save/compile/flag errors loop a lot tighter for me as a beginner. The autocomplete seems incomplete though and there's no hover docs or ctrl-click through to source that I remember.

I look forward to the day I can replace JS with Rust. It would be nice to have a quick way to start doing Rust in the browser. I tried installing emscripten to give it a go, but the version in Ubuntu's deb repo was too old. I don't remember why, but building it from source didn't work out.

I also got a bit lost trying to get boilerplate together for that purpose. Something like maven archetypes would be really great for Rust... Project templates that get you started with a working hello world for whatever you're trying to do.

Just some suggestions. I basically like where Rust is going.

<comment><AUTHOR> A quick summary of where these are at:

Internationalization / Localization / Unicode (ICU): yup, no real progress. Needs some domain experts to drive it.

Date/Time : chrono is the most popular.

HTTP: hyper has been good for a few years now, tokio will make it async soon.

Crypto: there's lots of interesting work in this space, see _ring_ and rustls.

SQL: Diesel is the gold standard here.

So, some progress! You're absolutely right that growing the crates ecosystem is vital; we've doubled our numbers in the last year, but there's always more to do.

> project templates

[https://github.com/rust-lang/cargo/pull/3004](https://github.com/rust- lang/cargo/pull/3004)

<comment><USER20> Thanks for your reply Steve. You're a stand up guy. I'll look into some of these over the holiday. I want to give the new rustup a whirl.

</comment></comment></comment><comment><USER21> Steve is one of the amazing guys I have ever known. He answered all of my questions in IRC, he is such nice guy. I truly like him a lot. and most important point is Rust team chose him , because they realized how wonderful he is in communicating with people and being leader of community.

<comment><USER22> As far as I can tell he answers every question, and corrects every inaccuracy across at least these platforms: twitter, hackernews, reddit, [users|internals].rust-lang.org, irc; its mind blowing. Honestly, a talk on how he stays so connected without being awake 24/7 would be interesting ;)

Thanks, for all the hard work, Steve. You're devotion helped turn me into someone who loves Rust.

<comment><AUTHOR> Thanks both, and achanda358!

It's taken lots of work. I think I'm a nicer and better person in Rust than I was in Ruby, but that's all I'll say about that. I am very much not a perfect human being.

> Honestly, a talk on how he stays so connected without being awake 24/7 would > be interesting ;)

I wrote a blog post on that a while back: [http://words.steveklabnik.com/how- do-you-find-the-time](http://words.steveklabnik.com/how-do-you-find-the-time) it's still mostly accurate kinda.

<comment><USER23> This post is amazing! The best quote is ...

"For example, the biggest time I scrubbed out in my entire life was a choice that I made almost a decade ago: going to college."

A refreshing insight from a very intelligent individual!

<comment><AUTHOR> I have more complex feels about it as a general thing, but for me, I'm not sure I made the right call. I did learn a lot, and I made some very dear friends, but it was extremely expensive. If you (or anyone reading) are someone who's making this decision, please give it serious consideration, and don't just copy me: this is a really, really big choice to make in your life, and one you deserve to make for yourself.

</comment></comment></comment></comment></comment><comment><USER24> You have relentlessly pushed for better documentation. Thanks for that :)

</comment><comment><USER25> > We removed the repl from the tree, as it never really worked, and was a > maintenance nightmare. This one is the only one I know of today. Some people > ask about one, but nobody has done the work to get a good one together yet. > It's tough!

This is a bummer. I remember when I first tried out rust the repl was still a thing. As someone who writes mostly Haskell and Python, interactivity with a language is a huge plus. I hope that eventually another repl comes around.

</comment><comment><USER26> I'm highly curious about Rust as a potential introduction to systems programming. One thing that bothers me is the lack of proper classes. This seems to have become a trend among newer languages, as though traditional OOP is an outdated paradigm.

I have yet to be convinced that this is a good move. The attempted justifications I've seen hand-wave about problems with OOP, "composition over inheritance," etc. Meanwhile, in the real world, 99% of production code is OO and the paradigm continues to do its basic job--helping programmers model domain objects. Older languages like JavaScript and PHP have made their OO constructs _more_ robust over time, which suggests to me that in the end a critical mass of developers will always clamor for this easily understandable and productivity-enhancing paradigm over some theoretically pure alternative.

<comment><USER27> So what is it that you need classes for that dearly?

</comment></comment><comment><USER28> Congratulations on the work to make our computing infrastructure safer.

</comment><comment><USER29> It's interesting to see just how much the Rust language and libraries have evolved. Is there a wish list of breaking language changes waiting for a Rust 2.0 version?

<comment><AUTHOR> We do have [https://github.com/rust- lang/rust/issues?q=is%3Aopen+is%3Ais...](https://github.com/rust- lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3Arust-2-breakage-wishlist)

It is unclear if there ever will be a Rust 2.0. Even those that want it agree that unless it's incredibly easy to upgrade to from Rust 1.x, it's a non- starter.

<comment><USER30> There is also the possibility that a Rust 2.0 could fragment the community much like with Python2.7 <-> Python3.x, which would be "undesirable" at best.

<comment><AUTHOR> Yes, a split like this would be undesirable to say the least. Not to mention that systems people are used to near-total backwards compatibility; any sort of near-term timeframe for such a thing would destroy a lot of our credibility, in my personal opinion. I'm on team "never 2.0".

We still have some desire to indicate "epochs" of Rust development, as undoubtedly, things like idioms will change over time, new libraries will replace older ones, etc. But I'd prefer something like "modern C++", which could signify this kind of change, without giving up on backwards compatibility.

<comment><USER9> I sort of want to make an RfC for 2.0 preparation. I am mostly on team "never 2.0", but I recognize that I am sadly not overlord of all things Rust (if I were we'd have stable emoji identifiers already) and it's quite possible that 2.0 will happen some day.

The idea is to come up with a set of processes for 2.0. If the community decides to do a breaking 2.0 for some reason, we should:

\- Document _exactly_ what has changed.

\- Write extensive docs on upgrading

\- Write good tools that do the upgrade for you when possible, and point out areas where they can't help with links to docs.

\- Make it so that the cases where stuff isn't machine-upgradeable are minimal

\- Be wary of actually removing deprecated APIs.

\- Be wary of unnecessary extra breakage.

Python 3 took the attitude of "Okay, we're going to be breaking some things anyway, so let's break more!". I think that they had good reasons for doing that; and it makes sense in a way. But we may not want to follow the same philosophy.

<comment><USER31> I feel like you could just add a version number to the Cargo.toml (cargo new would automatically set the latest one). The crate would then be built with the semantics of that version and all crates you use still use the version they were designed for (as long as the semantics can be properly translated between the individual versions).

<comment><USER9> That wouldn't work in practice. Breaking changes need not be syntactic, and probably _wouldn 't_ be syntactic -- Rust isn't going to break the language for that. There's a good chance it would be semantic breakage that can't allow interoperation between crates.

<comment><USER32> What sort of semantic breakage do you have in mind? My impression is that there are few changes of that sort that couldn't be worked around somehow.

<comment><USER9> Changes to the orphan rules, for one.

Changing the behavior and representation of stdlib APIs. You would end up with e.g. two incompatible representations of String being used across the crate boundary.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER33> I would appreciate if anyone can share your dev setup for Rust. I tried Rust and Racer long time ago and it's not a pleasant experience.

<comment><USER9> VS Code with RLS is amazing. Still a work-in-progress, but some stuff works and it's only going to get better.

I'm mostly just used to sublime and vim with minimal tooling so it doesn't matter as much for me. But I'll probably eventually write a plugin for RLS for sublime.

<comment><USER28> > VS Code with RLS is amazing.

The only reason I have to install it.

</comment></comment></comment><comment><USER34> _In today's Rust, this would be an error, you need to write (e.f)(); At least the error tells you exactly what to do!_

If the programmer knows what the error is, and how to correct it, then their program should automatically do so, rather than molesting the user, as the purpose of computers is to speed up and automate. Why should the user have to foot the designers' bills?

Another cardinal sin and a sign of lack of thinking things through is breaking backward compatibility, like the example above: imagine you were an early Rust adopter, and wrote a non-trivial application in Rust; now imagine that the newest Rust compiler has several major performance and efficiency gains. It is understandable why one would want to re-compile one's application with the newest compiler, only to be thwarted by the authors' lack of understanding of just how important not breaking users' applications is. That is one of the core differences between _engineering_ and _hacking_. What other land mines await potential Rust adopters from programmers who do not have any respect for their users' time?

<comment><USER35> It's not the job of the compiler to speed up and automate _editing_code_. That's the job of an IDE. And we have a unfolding story for that: Rust Language Server, or RLS for short, which is a package providing pluggable Rust IDE-functionality for all kinds of text editors.

Besides, the change we are talking about happened 4 years ago, when Rust emphatically did NOT have any compatibility guarantees and was in a process of rapid experimentation. This has changed a whole lot – it's a stable language now, and has been for a year and a half.

<comment><USER34> _It 's not the job of the compiler to speed up and automate _editing_code_._

Calling changing the syntax on unsuspecting users __editing_code__ is really a stretch of gargantuan proportions. And I don't really care whether it's the compiler, the linker, or mega_mojo-2.546-alfa5-preview18, what ever it is, it runs on a computer so that whatever is being done would be fast, automated, and therefore efficient. If the programmer knew what to do with the input, the computer should churn through it, instead of chastizing the user and making them pay for the authors' oversight.

Otherwise, a computer makes no more sense than a toy does.

If I want to use a computer as a toy, I'll go play a video game. The rest of the time, it's a tool, a tool to do something an order of magnitude faster than a human could. If it slows me down because it requires me to _babysit it_ , I have a problem.

<comment><USER12> That's all well and good if the context is unambiguous, but if it isn't, people will get used to having this done for them (or not even know that it happens at all), and then be totally perplexed. Worse, maybe then people want even ambiguous situations to be made friction-free, so the compiler must guess. Then you've got the possibility of very confusing behaviour, doubly so if the ambiguity involves any kind of polymorphism (different, possibly contradictory behaviour per type!)

</comment></comment></comment></comment><comment><USER36> What would be interesting if it would be possible to develop with GC on, but then if you benchmark and notice that it's too slow, turn on manual garbage collection for specific pointers.

I don't know if it's possible, though (considering libraries).

<comment><USER37> Rust doesn't have a GC in the first place, so there's nothing to turn on. Even then, the fundamental hurdle with GC isn't the effect on your program's runtime, it's the effect that it has on _the lifetimes of your data_. GC (and RC) are means of dynamic lifetime determination. Manual memory management is static lifetime determination. The latter requires you to structure your code in a specific way, which may be less convenient for the programmer depending on the application. Converting dynamic lifetime determination to static lifetime determination then requires changing the very structure of the program itself (including how APIs work) while preserving semantics, which is beyond any existing tools.

<comment><USER36> I was just thinking that most languages are either GCed (like Java or Go) or manually curated (C/C++/rust).

My idea is that if one could write in a language like Go (which has some kind of GC), but when one wants, say "I'll take care of this memory".

<comment><USER38> Rust actually started with a model like this. The idea was when starting out for the first time you can use garbage collected pointers for everything and then switch to the manual model when you needed it. Problem is then that unless your standard library and all the major open source libraries work perfectly for both the garbage collected objects and for the manually managed objects then you need to learn manual memory management early on anyway, so the garbage collector wasn't helping anyone. The language design element of this is really tough to do in a usable way.

D has optional GC but their standard library is kind of fucked up.

</comment></comment></comment></comment><comment><USER39> Getting rid of the syntactic difference between moving and copying seems like a huge step backwards. Ditto with abandoning mailing lists for some wanky "already solved-as-a-service" web app.

<comment><USER40> > Getting rid of the syntactic difference between moving and copying seems > like a huge step backwards.

Did you ever use Rust back when you had to write "move"? I did. When you wrote stuff like:

        let (move x, move y) = (move z.a, (move z.b).append(move z.c));

It got old fast.

<comment><USER41> Admittedly there's still a syntactic difference between move and copy -- with Swift and C++'s definition of copy. Rust calls that Clone, though. :)

</comment></comment></comment><comment><USER42> There was a new Hurd version announcement a few days ago and somehow Rust reminds me of Hurd, but from a different direction: it seems to me that Rust simply changes way too much to be currently widely accepted at any scale, and has a high rate of attrition because of that.

Statements such as "But as of Rust 1.15, this restriction will be lifted, and one of the largest blockers of people using stable Rust will be eliminated!" and "It is unclear if there ever will be a Rust 2.0." (to avoid the "Python 2 / Python 3 effect") don't help.

I'm comparing this to Go (yes, yes, both Rustaceans and Gophers will yell "it's not the same!" \- in vain), where the Go 1.0 syntax was set in stone in 2012, and remained mostly compatible now, 5 years since, and _still_ it feels that the community is somewhat sparse and reinventing wheels on regular basis. The reality is that for complex projects and complex development environments, once "Rust 1.0" syntax gets stabilized, it will probably take 5+ years for the community to feel comfortable with it, and trust the language developers not to break things at a whim.

Remember that the still widely-popular Python 2.7 was released in 2010 (and it also sort-of set in stone the "Python 2 syntax"), and plan accordingly.

<comment><USER43> It's really quite unclear what you mean, why would Rust _adding new features_ (syntactic or otherwise) be an issue exactly? You do realise the .7 in Python 2.7 is because every version before that added new features (and syntax) while remaining backwards-compatible right? (well mostly, new keywords broke old code).

> Remember that the still widely-popular Python 2.7 was released in 2010

I mostly remember that Python 2.7 is a straight descendent from Python 2.0[0], and as far as I'm concerned a much better language for all that was added in the meantime (though technically I only took up Python circa 2.3, a fair number of syntactic and semantic additions had already been performed).

[0] and actually older than that, while 2.0 added major features the main change was a switch towards a much more open and community-driven environment with less single-organisation control over the project, it introduced PEPs, sourceforge hosting of the tracker and source and a very large expansion in commit bits from ~7 at CNRI to ~27 people around the time 2.0 itself was released, _technically_ 2.0 is a minor update to the 1.6 which had been released a few months earlier for contractual reasons.</comment></comment>


How is it possible for Visual Basic to be most popular .NET language? Lessons from past? Or?  - <AUTHOR> http://msmvps.com/blogs/bill/archive/2007/11/02/counting-deck-chairs-on-the-titanic.aspx

<comment><USER2> The key line is "VB is the best language of the two for working with COM legacy applications," remembering that "legacy applications" includes Microsoft Office.

<comment><USER3> Absolutely. I've (unfortunately) done some work on a vertical market app for homebuilders that is mostly written in Excel. If you're using the Office COM API, there is some syntactical sugar that VB.NET handles for you that makes it far easier to write VB.NET over C#, as much as I'd prefer to use it.

Theoretically I could abstract it out and have VB.NET wrappers, but considering the rest of the app is written inside of Excel using VBA, it just seemed to make more sense to leave it in VB.NET (read: lazy programmer).

</comment></comment><comment><USER4> From consulting experience, I can tell you that VB.Net is still HUGE amongst smaller companies. They often started with some custom application years ago that had an upgrade path of Excel > Access > VB 5 or 6, and ultimately landed on VB.Net.

It's easy to forget that there are a ton of applications out there that have been homegrown by the "office computer guy"; which is to say a developer that has never had any real training and fell into a developer position by necessity more than anything else.

My assumption is that for the shade tree developer, a book with "Visual Basic dot anything" on the cover is going to be more "friendly" seeming than any other language, especially one that uses glyphs right in the name (C#).

</comment><comment><USER5> Most software development happens inside big companies on applications that will never leave their walls. That software is written in Java and Visual Basic.

</comment><comment><USER6> 90 out of 100 .NET programmers that I know and work with use C# and know VB but choose not to use it so it's funny to see these stats to me.

<comment><USER7> You both _know_ and work with 100 (or more) .NET programmers?

<comment><USER6> I'm a software trainer and .NET/SQL consultant so, Yes :)</comment></comment></comment>


The full complaint against Oracle by the state of Oregon [pdf] - <AUTHOR> http://www.doj.state.or.us/releases/pdf/FINAL_Complaint_8_22_14.pdf <comment><USER2> Man, I'm wondering how Oregon didn't take advantage of it's excellent software culture and have them build this thing.

Oh, I know why. Oregon actually had a bill presented in the early '00's to accomplish that kind of thing. I was part of it, and it was all about making sure the State could evaluate Open Source type solutions right alongside proprietary ones.

It failed to see a vote, despite broad bi-partisan support, due to some expensive suits lobbying the speaker Minnis.

One case in point used then was the Portland Water billing system. That one cost a ton of money, and was released as a failure, costing more money, and in the end, is likely still costing money.

For this kind of change, Oregon could very easily have setup a foundation, or working group of some sort, and had this thing built out of many, if not all OSS components. Oregon would own it, and have more control over it, and would be able to exercise a lot more options managing it too.

Once that group saw success, they keep the jobs, Oregon saves cash, and they then start knocking out municipal solutions of all kinds, exporting that as needed for funding and or just cash for the public interest.

Oracle really screwed the pooch on this one. It's going to be painful for all involved, but I sure wouldn't want that document out there floating around. Enterprise sales will get just a notch tougher real quick.

<comment><USER3> In the requirements, OR seems pretty adamant that they want a COTS solution with no or very little custom code.

I'm sure they could do this project with OSS products and custom code integrating everything, but those don't come with support contracts. If there's no support contract that means OR has to support it itself, which means hiring people with deep knowledge of the system to quite possibly do nothing for long periods of time until a bug is found for their particular use case, because no one else is using the product.

That's not cost effective compared to an off the shelf solution from a vendor that can use 1 support staff to help multiple customers, especially when you realize this means requiring at least a security expert, a db expert, and a frontend UI/UX.

It's exactly the same reason why tech companies don't write everything themselves from OSS projects. Sure, they do that for certain things that they deem critical, but not for things like salesforce or the direct deposit and accounting software and sometimes not even for stuff as important and tech-ey as a vcs, like perforce.

I'll totally agree that OR should keep IT in house for this stuff, but I don't think it's a great idea for a state or business to suddenly get NIH syndrome and want to write custom software themselves for anything their agencies might need. Can you imagine if this had happened because OR did this project in house and had the same results? Or if the whitehouse had said they weren't outsourcing healthcare.gov and released the same PoS that was actually released? It'd be even worse than the current fallout because they aren't subject matter experts.

At least OR appeared to try and be competent by having an in-depth sales cycle _and_ outside consultants to vet the proposals.

<comment><USER2> Yeah, that's due to a strong bias away from anything else. Lots of lobby dollars in play reinforcing that, and there is the strong perception that Oregon can't actually afford to make any kind of investment.

But this shows Oregon can, did, and it was botched horribly. Doing the same while providing local jobs, some great skills to be used all over the place, and build something that has a very likely lower overall ownership cost profile makes a ton of sense!

It just won't get proposed in the current political climate, which was the point of my reply.

Of course Oregon wants COTS. Everybody does, because they think the vendor will own it, saving them money through economies of scale. Quite frequently, COTS can do that, but for something like this, something new, that needs to communicate with a lot of varied systems?

No way in hell it was ever gonna be COTS, and that right there should have triggered a much different, "how does Oregon do this?" kind of discussion.

Oracle has a good sales team, and they sold it right to this dynamic, which is what they were supposed to do. Problem is the value really wasn't there. No matter what, it was going to take some real work to build out the exchange and have it function well.

As for the support contracts, those come with an annual cost. It's very highly likely that cost could simply provide a job for the people who built the thing. Additionally, having seen success on a project like that, the same team would be well positioned to build out more and or get funded by other municipalities seeking similar solutions.

I don't have the basic numbers a few of us ran back then, but they were compelling.

This works the same for States as it does companies or anyone else. Make the in-house investments and own the tools. From there, buying help is always an option. Avoiding it is another option. Relying on a vendor, who will very frequently oversell their support staff, counting on their product to be a winner, often results in that support contract merely funding the trouble shooting. More dollars are required to buy, implement, test, etc... fixes.

Fixes, which by the way, will be called custom patches for major customers due to the size and non COTS nature.

<comment><USER2> It could go badly either way.

However, I find it very hard to believe a competent group would actually fail in this spectacular of a way.

Vendors often know just a little more than the client does, and they do oversell, and "cost effective" gets calculated to a point where the purchase price and services costs are much closer to building something than not.

And some of my career is in selling just that kind of enterprise solution, and that's exactly how it goes a lot of the time. There is value there for sure, and the vendor will need to capture as much of it as it can in revenue, while delivering as little service as possible to keep margin.

Those expensive people, who likely would have built the system, wouldn't be doing nothing. Not at all. Once that system is up and successful, they continue to build lots of things OSS style. Boring, simple, cost effective things and anybody anywhere can pick them up and use them too.

Lots of synergies here for States and municipalities looking to create jobs and manage costs.

Having been on the ugly end of these things, it's worth a look. Perhaps it wasn't the right call for this project, but it really wasn't evaluated. And there are few entities able to answer an RFP to make that evaluation, who don't also sell very expensive software licenses.

Should have been evaluated, and Oregon should have some basic competency in State IT to do that. The savings potential is significant, and Oregon needs to own it's IT anyway.

For a lot of things, vendor supplied software will win out. No question. But for those things where it won't, or cost of ownership over long periods of time do not make sense for the public, having a means to explore that was what the legislation was all about.

Keeps vendors a bit more honest too.

</comment></comment></comment></comment><comment><USER4> The state is not just suing for breach of contract to recover some money here -- the Attorney General is seeking a permanent ban on Oracle selling anything to the state.

 _" On page 119: (c) A permanent injunction prohibiting Oracle from marketing to or entering into a contract with any public corporation of or agency of the State of Oregon from the date of judgment forward. "_

<comment><USER5> Wow.

I'd be surprised if there wasn't a "public corporation of or agency of the State of Oregon" that currently uses some piece of Oracle software. I'm sure current contracts wouldn't be affected, but what about when they come up for renewal?

<comment><USER6> You could well be correct, but in that case it's an opportunity to take a hard look at how adequately the "system" used by that agency is actually working, and possibly make revisions where indicated or necessary.

Trust me, I know there are Oregon state agencies that have suboptimal software systems. Even though Oregon is a low population state, it still runs a large number of systems, and among them are others that are bound to be marginal.

It's silly to be idealistic, nonetheless it's denying the obvious to miss the chance to "do it right", to develop and apply the rigorous process alluded to in several comments above.

A plan for the long haul, integrating and unifying systems, and reducing "reinvention of wheels" where appropriate, and organizing truly knowledgeable oversight of the state's data management would go a long way to prevent recurrence of recent mistakes, have systems that work better, and cost the public less.

No one has to tell me it isn't going to happen, Oregon is where I live, and logic doesn't stop me from wishing that it would.

</comment></comment></comment><comment><USER3> my favorite bit so far:

> He added that "they broke every single best practice that Oracle themselves > have defined. It is one of the worst assessments I have performed * * _." > The same developer wrote to Oracle, "You are Oracle people, working on an > Oracle hardware platform, with Oracle technology products, on an Oracle > solution._ * * Oracle should be delivering these environments and products > as a solution, like they actually understood the products and owned the > solution which has not been the case by a long shot."

<comment><USER7> Makes sense in theory, problem is the software (Fatwire) was acquired, and the talent was "body shop" quality subcontractors. Oracle's database product is really the only thing they've built themselves and understand, everything else has been purchased.

</comment></comment><comment><USER8> Where's the case of the taxpayers of Oregon against the state that due to sheer negligence and ignorance managed to deliver nothing?

They did not oversee the work, they allowed Oracle to oversee itself, and they hired outside consultants at every single fucking point along the way to do what was their job.

</comment><comment><USER9> _A former Oracle employee was more direct saying Oracle's products were seemingly configured "by a kindergartner."_

&

 _An internal assessment estimated that the "Oracle Solution" was 40% custom code_

Anyone know who the kindergartners were ? I believe Oracle are now in the business of sending their software development to far away sweatshops.

I'm pleased that action is being taken here - software now seems to be seen as a commodity by far too many - the craftsmanships is gone and the salesman have taken over.

</comment><comment><USER10> Fascinating view of yet another high-profile software project failure. Also a demonstration of the consequences of not making getting software development right a priority.

</comment><comment><USER11> I guess it is easier to blame Oracle than to fire the truly incompetent managers of this project.

</comment><comment><USER12> A fool and his money are easily parted</comment>


Tech Companies Owe Us Billions of Dollars - <AUTHOR> https://www.jacobinmag.com/2020/01/us-tech-companies-double-irish-tax-avoidance-schemes-google <comment><USER2> Taxes-as-punishment is one of the dumber lefty genres.</comment>


P-T mass extinction was due to an ice age, and not to warming - <AUTHOR> https://wattsupwiththat.com/2017/03/06/shock-finding-p-t-mass-extinction-was-due-to-an-ice-age-and-not-to-warming/ <comment><USER2> Blogspam of

[https://www.unige.ch/communication/communiques/en/2017/cdp06...](https://www.unige.ch/communication/communiques/en/2017/cdp060317en/)

Site takes somebody's press release, word for word, and inserts its own phony author credit. Nice.

<comment><USER3> Blatant plagiarism of an anonymous press release. Dreadful! Mass circulation newpapers do this on a daily basis for rather obvious reasons. WUWT comes into this category as the world's most popular climate website.

The copy is not quite word for word: Watts deletes 'contact Urs Schaltegger, [telephone number]'. For which, I guess Professor Schaltegger is grateful.

The finding that climate warming is not the only explanation of global ecological disasters in the past on Earth is of course of minor interest.

<comment><USER4> You personally have made 4 of the last 6 HN submits of their blogspam articles. Why are you trying to drive undeserved traffic to their site?

And why defend blogspam sites in general?</comment></comment></comment>


WeWork's List of Potential Conflicts Adds to Questions Ahead of IPO - <AUTHOR> https://www.wsj.com/articles/weworks-long-list-of-potential-conflicts-adds-to-questions-ahead-of-ipo-11567808023?mod=rsswn <comment><USER2> With so much bad publicity, it seems likely WeWork's IPO is dead in the water. I'm surprised anyone's still willing to underwrite it.

The interesting question is going to be what questions will now get asked of SoftBank Vision Fund if any by it's investors. Going by the Theranos example probably nothing but raising capital for their next fund may also be dead in water after so many of their high profile investments have had issues.

<comment><USER3> What does it mean to underwrite an IPO? Isn't it caveat emptor? What is being unwritten?

<comment><USER4> The underwriter guarantees that the company will raise a certain amount of capital, by agreeing to take up the shares themselves if nobody else does, in exchange for a cut.

[https://en.wikipedia.org/wiki/Underwriting#Securities_underw...](https://en.wikipedia.org/wiki/Underwriting#Securities_underwriting)

</comment></comment></comment><comment><USER5> Show of hands... Who is throwing shade on We while being a tenant?

<comment><USER6> What's good for customers and what's good for shareholders are very different things. WeWork having an infinite number of locations for you to use your membership at is great for you as a customer. It's pretty bad for shareholders, though, when the bottom falls out of the market and WeWork is stuck in leases for locations that nobody goes to.

I think a lot of the IPO criticism comes from that way of thinking. So I don't think it's bad to "throw shade" at that business model while still being a customer. WeWork is taking all the risk out of real estate for you, the customer. That's good for you, but maybe bad for them.

</comment></comment><comment><USER7> We have a bunch of upcoming actual tech IPOs coming ahead, like Cloudflare, that provide a useful and valuable service. 'We' is just the left over husk that the VCs are trying to get sold off because the founder took the value out already.</comment>


Assembly Language:  Still Relevant Today - <AUTHOR> http://wilsonminesco.com/AssyDefense/ <comment><USER2> Tangent: I wish more (any?) high-level languages were capable of expressing self-modifying code safely. A lot of values are variable at compile time but constant within a significant block of computation at runtime. If compilers were designed to emit self-modifying code, they could propagate constants through the block and replace register/register instructions with register/immediate instructions, freeing up registers for other variables. This is the promise of JIT compilers but in practice the popular jit-compiled languages have too many other performance issues to be popular for serious CPU-bound work. Plus the jitter has to do a lot of analysis at runtime. It would be cool if you could mark a block of C code with `#pragma jit`, making the compiler emit a binary that contains some compiler IR and a peephole optimizer to make the code as tight as possible given the conditions at runtime.

<comment><USER3> C# (Microsoft stack, probably other stack, probably other .NET languages) lets you generate or input C# code at runtime, compile it, and run it through the jitter as desired. It's nearly trivial to do it. The Regex classes for example create code at runtime to do compiled regular expressions, but I think they do it with emitted IL instead of C# code directly.

All the pieces are there.

<comment><USER4> Have you ever seen the jiter use SIMD? Having written some test code that was the simplest use case (multiply an array of floats by a float constant iirc) I have not. C# is a great language, but not for compute bound problems.

<comment><USER5> Actually, I just tried it:

                float[] floats = new float[1000];
                float factor = 1.01f;
                int index = 0;
                while (index < 1000)
                {
                    floats[index++] *= factor;
                }

...becomes...

00007ff8`80a804a9 488d549010 lea rdx,[rax+rdx*4+10h]

00007ff8`80a804ae c4e17a1002 vmovss xmm0,dword ptr [rdx]

00007ff8`80a804b3 c4e17a590524000000 vmulss xmm0,xmm0,dword ptr [00007ff8`80a804e0]

00007ff8`80a804bc c4e17a1102 vmovss dword ptr [rdx],xmm0

This is in VS 2013, compiled with DEBUG off, prefer x86 off, and 'any cpu' as the target.

<comment><USER6> Those are scalar instructions, not the SIMD instructions. With x86_64 the fpu stack operations are basically for legacy purposes only, and normal floating point operations are expected to be done with the SSE/AVX scalar instructions. SIMD instruction used the packed variants of the commands allowing you to multiple say 4 floats in a single instruction.

</comment></comment></comment></comment></comment><comment><USER7> When I was at Microsoft, at least among several of the better developers, when debugging an issue, many would just ignore source code and enter a bunch of "u" (disassemble) commands into windbg. This is IMHO a great habit if you're writing C or C++. In many cases it ensures less distance between you and a bad pointer dereference. Your code, my code, source code, or none - doesn't matter. Just look at the faulting address and see what it expects.

From a certain vantage point, in these languages, if you aren't seeing assembly from time to time, you're not seeing reality.

Consequently, I kind of chuckle when I hear people say they can't debug optimized builds.

</comment><comment><USER8> Two or three years ago I was doing an informational interview, trying to move from a QA job to a developer job, and I mentioned to the guy that I used assembly code almost every day. He guffawed and said I was full of it, but it was true -- firing up a debugger and stepping through assembly might be pathological on the desktop these days, but when you're investigating a failure on a back-end datacenter machine that's running some interim build that's impossible to find matching symbols or source for, probably over a KVM...

<comment><USER9> I don't think it's unreasonable to differentiate between reading assembly produced by a compiler and handwriting assembly. I do the former several times a month and the latter almost never.

<comment><USER10> It's _never_ reasonable to laugh at someone you're interviewing. Too many so- called engineers treat an interviewee just as a captive audience to brag about their own skills.

</comment></comment></comment><comment><USER11> An article I wrote a while back, largely about how assembly is not dead:

[http://www.dadhacker.com/blog/?p=1911](http://www.dadhacker.com/blog/?p=1911)

That project was using a CPU costing less than twenty cents to control the power of a consumer product. Code space mattered a lot, and doing the project entirely in a high-level language would have doubled the part cost. When you're talking quantities in the tens of millions, saving ten or twenty cents on the cost of goods is a Big Deal.

</comment><comment><USER12> No mention of graphics programming or signal processing? High level syntax just gets in the way when you're trying to pack six pixels into two registers just right. Assembly language is still pretty much the right tool for the job.

<comment><USER13> Or security, for that matter. Reversing, malware analysis, black-box auditing, &c require, at minimum, the ability to read assembly.

The article is begging the question. I'm unaware of _anyone_ who thinks assembly is not relevant.

<comment><USER14> Talk to a data scientist.

<comment><USER15> Or from my experience lately, talk to javascript programmers.

They call javascript the "assembly" of the web, yeah certain subsets of programmers are interesting in their beliefs.

</comment></comment></comment></comment><comment><USER16> I know a developer that earns well above 1500£ per day writing and maintaining x86 assembly embedded in C++ for finance applications.

That is higher than the going rate for Haskell in finance afaik.

So yes, still relevant.

<comment><USER17> Huh. Too bad it's finance. Is there anyone in a non-parasitic industry still paying that kind of money for assembly coding? Maybe I should get back into it. I always loved the low-level world, anyway.

<comment><USER18> Furthermore, is any non-parasitic industry paying that kind of money for any coding?

<comment><USER19> Further furthermore, is any non-parasitic industry paying that kind of money for anything?

<comment><USER20> Heads of co-ops or well-run businesses (eg Costco)?

<comment><USER19> I have difficulty believing that beyond the rare exception, those who earn over £1500 a day are nothing more than rent seekers who's staying power is more political than based on work and skill.

<comment><USER21> If securing a $2300/day job through political means is easy why doesn't everybody do it?

<comment><USER20> Exactly. It certainly takes strength in the skill of politics. While some are naturals, it's an art and science that's anything but simple. The people on top were often groomed for it by experts (parents or whatever) over literally decades. They also get lots of practice during that time.

That's why I tell people who want to be rich or powerful to master people skills, maintain right image, go to right schools, get the right connections, and deal/negotiate their way to top manager by manger, boardroom by boardroom.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER22> I can heartily recommend this book for beginners [http://www.amazon.com/Assembly-Language-Step-Step- Programmin...](http://www.amazon.com/Assembly-Language-Step-Step- Programming/dp/0470497025)

<comment><USER23> For more (in the x86-64 specific context), see also [http://tinyurl.com/x86-64-assembly](http://tinyurl.com/x86-64-assembly)

</comment></comment><comment><USER24> I'm a bit surprised by the title of the article. The content was a fun and interesting read. When I read the title I thought to myself: "of course assembly is still relevant!"

Which group of people or school of thought would say that assembly isn't relevant? I'm genuinely curious.

<comment><USER25> The group of people chasing the javascript framework of the week, writing text editors in javascript.

<comment><USER20> "writing text editors in javascript"

Just 5-10 years ago, that might have been considered a joke. Now I wonder if you're referring to a specific project. And if it's already deployed as a Droplet. ;)

<comment><USER26> [https://en.wikipedia.org/wiki/Atom_%28text_editor%29](https://en.wikipedia.org/wiki/Atom_%28text_editor%29)

<comment><USER20> Unreal...

<comment><USER27> [https://blog.mozilla.org/blog/2014/03/12/mozilla-and-epic- pr...](https://blog.mozilla.org/blog/2014/03/12/mozilla-and-epic-preview- unreal-engine-4-running-in-firefox/)

<comment><USER20> Oh I've seen plenty of JS stuff. That was the most incredible one I knew of. But a friggin text editor given all platforms have several good ones? And with less bugs & MB than a browser. I mean, come on...

</comment></comment></comment></comment></comment></comment></comment><comment><USER28> Assembly Language is for understanding the processor.It is still relevant for that.</comment>


Buffalo – a new Go web framework - <AUTHOR> http://gobuffalo.io/docs/getting-started <comment><AUTHOR> I like how, in their README on GitHub, they mention that they're not interested in playing the benchmark game. That's great. For the most part, I don't care about benchmarks. I mostly just care about tooling that helps me to be more productive.</comment>


Lost or Stolen Laptops Cost Companies $2.1 Billion Per Year - <AUTHOR> http://venturebeat.com/2010/12/02/the-wikileaks-wake-up-call-lost-or-stolen-laptops-cost-corporations-2-1-billion-per-year/

<comment><USER2> In the context of this discussion it is worth mentioning preyproject.com

From first-hand experience, this project is amazing.

A thief stole my laptop from our office. In less than 24 hours I received all the necessary information I need so I could call the police, and chase down the perp.

 _this message was written from said laptop, which is back in my possession_</comment>


Retiring Python as a Teaching Language - <AUTHOR> http://prog21.dadgum.com/203.html <comment><USER2> I believe that teaching programming should be centered around teaching programming concepts as opposed to languages, a la SICP or Concept Techniques Models of Computer Programming. The languages used there (Scheme and Oz) are just vehicles to teaching timeless concepts.

Teach a language and you will prepare someone for the present. Teach concepts and will you prepare someone for the future.

By concepts I mean things like closures, higher-order-programming, concurrency, explicit state, inheritance, security, encapsulation, complexity, laziness, etc

<comment><USER3> I think your on the money here.

Also, I believe that you need to learn more than one language to full appreciate those concepts.

There is some irony in the fact that i developed my own indepth, initiative understanding of these concepts while learning JS.

<comment><USER2> You can certainly learn many concepts and techniques using js, but it is still a severily limited language for general programming.

You could learn using many different languages for sure, but I believe it would be more efficient with one language that is truly multiparadigm, where no paradigm is favoured and there are primitives for all core concepts.

With all these general concepts, techniques and design principles under your belt, learning the core of a new language is a breeze, almost just like translating the syntax.

Maybe it has all the primitives, or you have to use a lib or build your own, or apply a design pattern, it might be more or less verbose, but you would be just implementing the crucial thing, the design.

Of course, then you have to learn the idioms too to become proficient.

<comment><USER3> > but it is still a severily limited language for general programming.

I don't understand where this concept comes from? It is as turing complete as any other language. From a "General Programming" perspective, it is also one of the most prevalent run time environments.

> You could learn using many different languages for sure, but I believe it > would be more efficient with one language that is truly multiparadigm, where > no paradigm is favoured and there are primitives for all core concepts.

I find being in a single language can lead you to associate the abstract concepts with the syntax too much. In moving the concepts between different syntax and forms the abstract notion becomes clearer, for me at least. I appreciate that learning everything in a single would likely be more "efficient".

> With all these general concepts, techniques and design principles under your > belt, learning the core of a new language is a breeze, almost just like > translating the syntax.

Absolutely! :)

<comment><USER2> Its just that its domain is mostly restricted to the web. As you pointed out this is not so terrible at all, at the end of the day that's where the bulk of the jobs are for instance. Actually, I am amazed that a language that was originally designed for such a narrow domain is where it is today (thank XMLHttpRequest and V8 for that).

I totally agree that learning several languages is extremely enlightening, exactly for the very reasons that you have listed.

One big reason for one teaching language is that there seems to be a bit of a FP vs OO religious war of sorts. If you think in concepts, such disputes look shallow; in fact, the whole idea of paradigms becomes irrelevant. This is why I believe that to learn both FP and OO in the same language (together with many other paradigms) is much more enriching, because then you will learn which one to choose for a given situation, based on relevant techniques, and when and how to combine them, rather than being stuck with whatever is available in a language that favours one paradigm (or just one form of concurrency, or of inheritance etc). You will learn how to let the problem drive the design, rather than the language.

Pure languages like Haskell or Smalltalk, for instance, can be optimized and super concise precisely because they are restricted to one paradigm. But, for the reason above, I don't think they would be good for teaching general programming and only entrench that FP vs OO view (in fact, I think js would be better than these). But once you know, learning such languages is a pleasure.

</comment></comment></comment></comment></comment><comment><USER4> It's unfortunate how despised JavaScript is on Hacker News, because JavaScript is objectively the best language suited for teaching people to program.

Want to work with data from any API? Well JSON, industry standard data protocol, happens to already use exactly the syntax you're familiar with!

Want to give them a sandbox to mess around in...take your pick between jsfiddle, plnkr, codesandbox, etc. Many of these let you collaborate realtime with people to help them work through problems directly. Most people learning to program have 0 familiarity with using a terminal, and having to go through the process of getting an environment set up correctly ALONE is enough to turn off the vast majority of people to programming.

As the author already mentioned, rendering a UI in JS is going to happen on the most ubiquitous platform on the planet: the web browser. If a programmer starting today goes into UI work, the odds are that they'll be building UIs for a web browser is astronomically high, the odds that they'll be using a one-off python toy library is highly unlikely.

And last but not least, the syntax of JavaScript is very much like the syntax for Java and C. Learning JavaScript first makes it very easy to read code from other mainstream languages and have a good idea of what's going on. Particularly with ES6, there is very little to complain about in the syntax of JavaScript.

<comment><USER5> There's a difference between "teaching people to program" and "teaching people to program _apps_."

Sure, JS is the hip language for making SPAs, but not the best way to show what boolean logic is and the difference between for and while loops.

<comment><USER6> Why can't you reach someone those things in JS? JS has all of what you mention...

<comment><USER7> Using JavaScript to teach the _design_ of appropriate data structures and algorithms for a computational problem is bound to be an uphill battle.

And anyone who seriously considers teaching a first language that students can't use in a data structures and algorithms course (without having to learn a second language) isn't worth paying much attention to.

<comment><USER8> "And anyone who seriously considers teaching a first language that students can't use in a data structures and algorithms course (without having to learn a second language) isn't worth paying much attention to."

Why? Both colleges I've been to had their DSA courses after at least two intro courses, and in a different language than the intro courses.

What is so inherently contemptible about this?

<comment><USER7> Did they give you a formal semantics for the language in which you implemented algorithms? Or did you merely "prove" things about informal descriptions of algorithms?

<comment><USER8> No, proofs were usually done in an entirely separate class later, with the DSA classes focused on data structures (stacks, heaps, hash tables, etc.), sorting algorithms (merge sort, quicksort, etc.), and efficiency (e.g. using Big O). Such was the majority of the content in both cases, at least.

I still don't really have an answer to my question, though. What makes using a different language such a poor choice in this context?

<comment><USER7> > No, proofs were usually done in an entirely separate class later

Okay, now _that_ is contemptible. And you didn't address my question: Were your proofs about actual programs, or merely about informal algorithm descriptions?

> What makes using a different language such a poor choice in this context?

The fact you would waste too much time teaching a second language at a sufficiently rigorous level to write proofs about programs written in it.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> It feels reasonable to assume that a majority of his teaching has been for boot camp style instruction and not the traditional, 4-year formal academic route.

I say this because, across the board, I know my staff would gaff at the prospect of trying to incorporate JS into anything other than an elective. Honestly, even to that, they would throw their pinkies in the air in retort of the thought that JS be taught at all in a 4-year institution. "Nay, let it be relegated to the community college.

...I know I know, 'burn him at the stake'

<comment><USER10> Which only further demonstrates the gap between a 4-yr Comp Sci degree and software development.

Which, don't get me wrong, I'm a university snob and think software engineers should understand things all the way down to the machine level, but the snobbery in reaction to JS* being taught in 4-yr curricula (which I wouldn't doubt as a widely held reaction) is saddening.

*JS wouldn't be my first choice for an actual university course on real-world coding; but I do resent the the chasm between applicable and theoretical software engineering skills... though this problem isn't confined to Comp Sci.

</comment></comment><comment><USER11> So aticle is from 2015. End of 2017 I wanted to make really simple GUI for a python script. It turned out making a GUI with 5 buttons and shipping it as exe in Python 3.6 is extremely complicated and convoluted. I wrote the main logic in 30min, and spend 2 days figuring out the GUI and the packaging to Exe.

<comment><USER12> Perhaps the real problem is GUI framework fragmentation or confusing docs, because I ship GUI applications with tkinter and pyinstaller without great issues (pyinstaller -m hehe.py and you're done! Single file exe you have).

<comment><USER11> Well. I tried cxfreeze first, an sit failed on including tkinter properly. And while pyinstaller handled tkinter w/o issues, it failed miserably with scrapy requiring workarounds and many trial and errors.

Anyway, having packaged apps in Javascript (nodejs) , Java and several other languages/tools/frameworks , I find the state of packaging and GUI in Python simply pathetic, it really takes you 20 years back :)

<comment><USER13> The next time you need a .exe with GUI, you might want to also try C# with the free version of Visual Studio (Community Edition). C# is pretty easy and there are lots of examples, stackoverflow questions, github projects, etc. to learn from. If you target .net framework 4.5.2, then your app will run on any computer running Windows 7 or newer. Also, the executable size will probably under 200k for a simple application. Visual Studio makes it really easy to build a GUI and attach widget event handlers, too.

<comment><USER11> Thanks for the suggestion. I kind of already know that. But does c# has something like scrapy? Scrapy is really good for scraping, makes it really easy to write all kind of scrapers and the performance is excellent for something you hack up in 30min.

</comment></comment></comment></comment></comment><comment><USER14> Teaching what, exactly?

I don't see why anyone would need a specific "teaching language," in the first place.

You don't teach a language, you teach concepts. You teach about variables and call-stacks, function calls, how the hardware works, computational complexity, and common algorithms that are used.

In any application you'll likely be using multiple languages and throughout a career you'll be using many languages or you'll be unemployed frequently.

I don't have particularly positive feelings about Python as a language, in fact there's a lot about it that I think sucks. But I feel the same way about Javascript and Lisp and C.

Which doesn't take anything away from any of them. But it does highlight to me a deficiency in programming education if someone strongly believes that we should put off exposing students to new languages.

The syntaxes and libraries can be slightly different but the concepts are all very closely related. So I think it's a huge problem that we allow people to have these complexes where they say "I'm a C programmer," or "I only know Java." Not that I'm against specialization but I think it causes some artificial intransigence that's undesirable at any level and hard to break otherwise successful individual contributors of.

</comment><comment><USER15> I still think Python is a superior teaching language. Less weird behaviors and just easier to get the basics of things like manipulating arrays and strings, reading/writing from a file, creating a "for" loop, etc. etc.

That being said there is a solid point to the article. If students want to delve into graphical displays great. Suggest they investigate JavaScript (after they get the basics of traversing an array down). Or teach both languages at once switching to JS for graphical portions. They are similar enough this shouldn't be too difficult. Plus it would help prevent language tunnel vision or language clinging and/or new language phobia.

</comment><comment><USER16> Like many others in this thread, I think the question boils down to what you are trying to teach. How to deliver an app? Have fun with Python. :( Doesn't matter how you cut it, if your Python program needs a gui, it's going to be a challenge.

You're either going to have to go the executable route, which is difficult to figure out your first time. Or you're going to go the web route, which is also difficult to figure out the first time, and you're going to have to not only learn html, css, javascript, but also WSGI, nginx, and a few other things as well.

I happen to think that going the web route is a really good way of doing things as a teacher because you get to teach a lot of general computing things along the way.

But the bottom line is what are you trying to teach? You can teach almost anything with almost any language, and in this case I'd say take the "programming" out of the "Programming Language" and ask yourself a different question: is there any one best language in which to teach people arithmetic, or art history, or physics, or music theory?

There's obviously not. It doesn't matter if you're speaking English or German or Japanese or Russian. These concepts can be described and explained just fine.

I think a conversation about what language to teach in has to boil down at least to the context it's being taught in and what is being taught.

This author's decision is as reasonable as anyone's based on what he's saying he wants to teach. And I think I have some sympathy. I don't have a 4-year degree in comp sci. Or anything. But if there's one thing I wish teachers everywhere in the tech world spent more time on, it would be deployment strategies.

Someone should be teaching that class at schools if they are not already.

</comment><comment><USER17> There's lots of different potential approaches and contexts for teaching beginners.

For low-contact teaching where the students were going to be doing lots of independent work between contacts, that was more concerned with enabling students to try stuff out, I'd generally agree with this.

For other contexts, maybe not; I think Python (or Scheme, or some others) a better choice for a first language in a broad, structured CS curriculum. Though I'd certainly still agree JS is a useful thing to have in your toolkit fairly early on in programming these days.

<comment><USER18> I think Python would be the best choice for an absolute beginner, I almost always recommend it when I'm asked what to start with -- it's objectively more pleasant to use than js. The thing about js is, you can get your hands dirty actually making some fairly interesting things quickly, it's just that things are much messier overall.

</comment></comment><comment><USER19> Python was my first foray into programming, and I still pay the bills with it. I still love it.

Trying to not let that bias influence my opinion, I too have been frustrated with some of its shortcomings. Distribution, concurrency, and GUIs have been excersizes more in patience and persistence than utility.

I've moved most of my efforts into Nim and haven't been disappointed. I don't know if it's a suitable teaching language yet.

But JS as a general purpose language? For web, web, web.

</comment><comment><USER20> Just wrote my first Python program today, to massage some text files. It was super easy.

I also found the syntax, uh, interesting. Mainly the lack of braces to denote blocks, ie functions, loops, if statements, etc. Indentng to me seems problematic and a learning hurdle. But as a long time Pascal/C/Objective C/Swift/JavaScript developer, what a virgin programmer thinks I've long since forgot.

Better than that garbage JavaScript though.

</comment><comment><USER21> I feel Python is a terrible teaching language, the only saving grace being the abundance of libraries. There is just so much magic involved that you can not give reasonable answers to the inevitable 'why' questions coming from intuitive students.

<comment><USER22> _There is just so much magic involved_

Compared to JavaScript, where {}!={} and [["2"]]==2?

<comment><USER21> Not compared to JS, I was thinking along the lines of Scheme or C.

</comment></comment></comment><comment><USER23> It seems absurd to recommend a teaching language without any consideration for the technical merits of the language to me. The argument in the article is among the lines of lets use javascript because it has the most shiny things.

</comment><comment><USER24> previous discussion on HN from 2015: [https://news.ycombinator.com/item?id=8921320](https://news.ycombinator.com/item?id=8921320)

and a Twitter thread from 2018: [https://twitter.com/mkennedy/status/949688651058835456](https://twitter.com/mkennedy/status/949688651058835456)

</comment><comment><USER25> Ok, so I want to quickly read a text file and save something back to another file. JS anyone?

</comment><comment><USER26> (2015) is missing from the title.</comment>


Are the mysterious 'interceptor' cell towers the handiwork of foreign entities? - <AUTHOR> http://venturebeat.com/2014/09/18/are-the-mysterious-interceptor-cell-towers-the-handiwork-of-foreign-entities/ <comment><USER2> Why all the speculation? Just post the lat/long or street addresses of these "fake towers" and let people go look at them. I know I'd go check out the one that's ostensibly in Denver.</comment>


KDDI's iPhone deal may shake up JP cell phone market - <AUTHOR> http://e.nikkei.com/e/fr/tnks/Nni20110922D22SS410.htm

<comment><AUTHOR> KDDI's current smartphone data plans are in the 6,000-yen range per month. An iPhone-only plan in the 4,000-yen range would be a significant discount compared to their Android and WP7 options.</comment>


A Note-Taking App for Mac OS X - <AUTHOR> http://getxpad.com/

<comment><USER2> I've recommended this on HN before. xPad is woefully lacking in some ways (e.g you can't even search your notes) but it gets some important basics _very_ right, and as a result, find myself unable to part with it. To quote myself:

"The simple magic for me is that you can just Cmd-N and start typing, and then when you're done, Cmd-R to rename/title it. No saving, obviously, but also no shift-tab or clicking in a title field. There's also a services menu shortcut for clippings: Cmd-Shift-X.

Contrast with Yojimbo (and many others), where a new note defaults to the title field. You have to either press enter twice or tab three times just to get the cursor to the note field. Even the "Quick Input" panel asks you for a title and tags first."

Whether it is the _best_ for you depends heavily on how you take notes, but if all you want is a simple frictionless notebook with RTFD pages, it's worth looking at.

<comment><AUTHOR> When I said "best" this was what I meant. For me, it's the best blend of simplicity and functionality, essentially just being a text editor with a drawer organizer. In nearly all cases, my notes only require basic formatting and are short enough than they don't require searching.

For other uses, such as taking clippings, composing blogs posts, and keeping a journal, I'd wholeheartedly reccomend a more powerful app like those suggested in the comments, especially VoodooPad.

But now the title has been changed, hiding my blunder of a headline. Any ideas on how this happened?

</comment></comment><comment><USER3> I use VoodooPad, which is a very solid application, and to boot, it's written by an indie developer.

</comment><comment><USER4> I prefer to take notes in Textile with TextMate. It's not hard to get the extra stuff, and then I can easily turn it in to HTML so it looks somewhat pretty. Then I can share my notes with other people as well. (I have TERRIBLE handwriting)

</comment><comment><USER5> Best? Please explain.

<comment><USER6> Indeed, much of the feature list is comically facile, "create as many documents as you like... Documents can be sorted... rename documents, delete one or many, and export a single, multiple, or all your documents". None of the features are in any way unusual.

There may be good, notable things about it, but unfortunately they haven't communicated what they are to me.

</comment></comment><comment><USER7> I personally find that evernote is the best possible notes/ read "xyz" later setup. (and the backing up everything to a web account helps too :p). Its also great because I can store documents such as pdf or scans, such as copies of work agreements, and search them all later!

</comment><comment><USER8> I just us the editor I like the most that I also code with.

</comment><comment><USER9> I use Zotero with Minefield (Firefox). Works fine for me.

<comment><USER10> Zotero looks way cool- I'm going to check it out. I know you can view your notes online, but is there a Zotero iPhone/iPod Touch app that I could use to load my notes locally and edit them on my iPod Touch?

<comment><USER9> Not that I am aware of, but an iPhone app would be a great addition.

</comment></comment></comment><comment><USER11> xpad is great, but i think it is no longer under development (which is why the author changed it from for pay to freeware).

</comment><comment><USER12> I use ShoveBox, but then again, I'm biased.</comment>


Show HN: San Diego School Pal (App Challenge Entry) - <AUTHOR>

My submission for the San Diego App Challenge. This was my weekend-ish project for a month or two earlier this year. It was a good opportunity to experiment with some new technologies (Bootstrap, MongoDB, MongoLab, Google Maps API, Bing Silverlight Maps, KML, and Geocoding.
http://sdappschallenge.com/submissions/6543-san-diego-school-pal
Some quick thoughts from the project: Google Maps beats Bing due to ease of use, HTML5, and most importantly licensing options; MongoLab is a great way to jump-start MongoDb without worrying about hosting a db server; Geocoding is easy; Wish custom bootstrap templates were around before I started. <comment><AUTHOR> Clickable link: [http://sdappschallenge.com/submissions/6543-san-diego- school...](http://sdappschallenge.com/submissions/6543-san-diego-school-pal)</comment>


Ring and Amazon get slammed with a federal lawsuit - <AUTHOR> https://www.businessinsider.com/ring-amazon-sued-federal-court-security-hacking-2fa-2019-12 <comment><USER2> Sounds like a lawyery money-grab.

> ...John Yanchunis, the attorney bringing the suit, told Business Insider, > adding that "all indication is that the security is lax on these machines."

"These machines" are only ever popped by the customer sharing their password. If you can sue a company for their customers' bad decisions, then we've got problems.

</comment><comment><USER3> If this sticks it will be a scary precedent.

I agree, Amazon _should_ have required 2FA for anyone with a Ring system, but should they really be legally liable? Basically anything without 2FA is "vulnerable" to credential-stuffing.

This feels like suing a home builder because burglars can break the windows.

<comment><USER4> Home builders don't have you sign an agreement that says you are responsible for break-ins. It doesn't seem to be necessary.

If this is all sensible and normal and rational and the victims' fault, why is there an agreement with everything electronic that says the user is responsible if anything goes wrong and the service provider is not? We should just outlaw that and go back to that misty land of yore - the default legal environment - and see what it is like. It can't be _that_ bad.

I'm sick of people complaining about the "legacy" legal system when it's been essentially eliminated for ordinary people. Maybe we should try it again.</comment></comment>


The Man Who Makes Your iPhone - <AUTHOR> http://www.businessweek.com/magazine/content/10_38/b4195058423479.htm?campaign_id=rss_topStories <comment><USER2> It's like this guy has been stalking me my entire life:

 _... he bought a couple of plastic molding machines and started making channel-changing knobs for black-and-white televisions. His first customer was Chicago-based Admiral TV, and he soon got deals to supply RCA, Zenith, and Philips (PHG)._

My family owned an RCA black-and-white TV in the seventies. This guy made the knobs for my childhood TV.

 _Gou's first break came in 1980 when he started supplying Atari with connectors that linked the joystick cable to its 2600 video-game console._

I remember that connector very well. What 2600 owner could forget them?

And the story just goes on like that, I'm sure. My iPhone is the spiritual descendent of those old things.

<comment><USER3> Was the connector memorable in a good or bad way?

</comment></comment><comment><USER3> So %0.0012 (11/920'000) of their workforce has committed suicide? What is the average percentage of suicide deaths in that age range in china?

<comment><USER4> Significantly higher than that, from what I understand. It's actually one of those unfortunately 'uninteresting' headlines that will just never make headlines: "Foxconn suicides significantly below national averages."

Remember: newspapers and blogs are in the selling eyeballs business, not in the reporting news business.

<comment><USER5> Well, to be fair, these people commited suicide _at work_ and sometimes left notes pointing to their failures _at work_ while working 7 days a week for 15 hours a day. I don't personally think this story is just media hype. [http://news.xinhuanet.com/english2010/china/2010-05/25/c_133...](http://news.xinhuanet.com/english2010/china/2010-05/25/c_13313857.htm) [http://blogs.telegraph.co.uk/news/malcolmmoore/100039883/wha...](http://blogs.telegraph.co.uk/news/malcolmmoore/100039883/what- has-triggered-the-suicide-cluster-at-foxconn/)

From the linked Telegraph article, "For those who believe the spate of suicides is statistically in line, given how many people work at Foxconn, consider this: the company says it has prevented a further 30 people from trying to kill themselves in the past three weeks alone."

<comment><USER6> Shall we tally up attempted suicides in the general population also?

</comment></comment></comment></comment><comment><USER7> _"When Apple's iPhone4 was nearing production, Foxconn and Apple discovered that the metal frame was so specialized that it could be made only by an expensive, low-volume machine usually reserved for prototypes. Apple's designers wouldn't budge on their specs, so Gou ordered more than 1,000 of the $20,000 machines from Tokyo-based Fanuc. Most companies have just one."_

<comment><USER8> You can count to twenty million very, very quickly in manufacturing. There are individual buttons in and near Nagoya that cost more if you press them once.

<comment><USER2> I believe it was Intel that used to joke about the "million-dollar club". The story I heard is that, as a fab engineer, you got admitted to the club by accidentally spoiling one lot of wafers, each of which represented more than one million dollars in gross revenue.

Since there are many, many potential process mistakes that can spoil an entire lot at once, the implication was that you weren't going to remain outside the club for very long.

<comment><USER8> Wait until someone forgets to tick off "Items to be returned to toolbox: ... #32) Phillips Screwdriver (1)" prior to testing ignition on a prototype aircraft engine. A million will sound cheap.

Have I mentioned that the engineering culture in this neck of the woods takes checklists _very effing seriously_?

</comment></comment></comment></comment><comment><USER9> One page: [http://www.businessweek.com/print/magazine/content/10_38/b41...](http://www.businessweek.com/print/magazine/content/10_38/b4195058423479.htm)

</comment><comment><USER10> _"Foxconn founder Terry Gou might be regarded as Henry Ford reincarnated if only a dozen of his workers hadn't killed themselves this year"_

Ouch, that's a cold way to start an article - odd considering they go into detail his charitable works later on in the article.

<comment><USER11> If you knew him, or knew people who have had personal relationships with him, you'd understand why this is a reasonable lead-in.

</comment></comment><comment><USER12> What is a 'postmodern industrial empire'?

I'm not sure it makes any sense, like the gradient of a cow.

<comment><USER13> If you take 'postmodern' as denoting merely time (say, post-1980s) it does make sense.

<comment><USER14> ...yeah, but that's not what it means.

Although I suppose letting words mean whatever you want them to mean is fairly postmodern.

<comment><USER12> Excellent point.

</comment></comment></comment></comment><comment><USER15> > The two were married on July 26, 2008, at the Grand Hyatt hotel in Taipei. > During the reception, Gou mounted the stage, shed his tuxedo jacket, and did > 30 pushups to prove his virility. Nine months and four days later, Delia > gave birth to a daughter, Hsiao-ru.

That gave me a chuckle.

</comment><comment><USER16> Fascinating. Since it seems from the article that smaller companies are less worker friendly, and people are literally desperate to work for Foxconn, it's hard not to see Gou as a good thing for China & the Chinese.

A business epic...

</comment><comment><USER17> The link 404'd for me, but it works without the campaign_id: [http://www.businessweek.com/magazine/content/10_38/b41950584...](http://www.businessweek.com/magazine/content/10_38/b4195058423479.htm)

</comment><comment><USER18> For all the shit that MBAs get, one thing you will never hear is "hungry people have especially clear minds"

That is absolutely awful.</comment>


Alphabet unveils robot dog capable of cleaning the house - <AUTHOR> https://www.theguardian.com/technology/2016/jun/24/alphabet-robot-dog-cleaning-housebot-spotmini <comment><USER2> [https://news.ycombinator.com/item?id=11962167](https://news.ycombinator.com/item?id=11962167)

</comment><comment><USER3> The video was pretty compelling, but the noise those machines make... Can someone familiar with the robotics field comment on the future possibility of reducing mechanical noise found in robots?

</comment><comment><USER4> Wait, I thought Alphabet is selling Boston Dynamics...</comment>


The 10 firms that rule the world - <AUTHOR> http://www.washingtonpost.com/blogs/ezra-klein/post/the-10-firms-that-rule-the-world/2011/11/07/gIQAqR3KvM_blog.html

<comment><AUTHOR> Wonder where in the enumeration would the first consumer/technology/B2BProduct companies would lie.

<comment><USER2> See the list of top 50 (linked from Tyler Cowen's post):

[http://littlegreenfootballs.com/page/260753_The_network_of_g...](http://littlegreenfootballs.com/page/260753_The_network_of_global_corporat)

Note that "ruling the world" here amounts to "having nominal ownership of stocks in public companies". Consequently, practically all of the top 50 companies are asset management companies (such as Vanguard or Fidelity), financial conglomerates that also do asset management, or insurance companies. The only apparent exception is China Petrochemical at 50th. Not a very interesting "finding", really.</comment></comment>


Sell your TV: you're better off without it. - <AUTHOR> http://semblancesystems.com/blog/sell-your-tv/

<comment><USER2> I'm sorry, but I think this is post is idiotic.

First off, the author sets up a bunch of straw men to bash down in favor of his point, the most frustrating of which is:

> I watch truly quality TV shows. There are definitely the odd few of those > but, if you must, download them and watch them on your computer: without ads > and over a short period. At least in this instance you know what you're > subjecting yourself to and you will be doing it for entertainment: not in > the background.

This is identical to me making a blog post saying: "Sell all your books: you're better off without them. Sure, you might miss out on some quality literature, but you can always just download them in pdf format and read them on your laptop."

Television is a _medium_. Every medium has its Two and a Half Men, and the luxury of the modern TV industry is that we have more freedom than ever to pursue programming we prefer. Making a big deal from divorcing yourself from a medium is fine -- of course you're going to have more free time, if I quit listening to music I'd probably have more free time as well -- but doing so with the caveat of 'oh, download some specific shows that you like' is shallow and unfair to the reader.

<comment><USER3> Agree. There are plenty of ways to free up more time to do more enriching things aside from selling the TV.

From the OP: >> I've decided that in the future, wherever I am, it'd be better not to own a TV. It'll save me the temptation and free up so much time.

For many people, cutting back on "connectedness" to the Internet would do the same. For some people, social media is a bigger time suck than the TV ever will be.

<comment><USER4> _For some people, social media is a bigger time suck than the TV ever will be._

For me, it's this site and Google Reader.

</comment></comment></comment><comment><USER5> We threw out our TV 4 years ago. Haven't looked back. After Katrina, we lived with my parents in Texas, who had just moved into their new house. We convinced them to not turn on the TV, just because we were sick of the news. And then we decided it was good for our daughter. My dad finally broke down a few months later and started watching the History Channel. My daughter immediately sat down and we didn't notice any bad behavior. Until the TV was turned off. When she became a holy terror. We repeated that experiment every day for 3 years, and finally I came home from school one day and my wife put the TV out on the curb.

I'm convinced TV content and especially the heavily commericalized product on the airwaves, activates a huge amount of sympathetic tone. Thus the bizarre ability to stare at it intently, then the almost freakish let down experience when the tube goes off.

Life has been steadily getting better since. We eat healthier, spend more time with the kids, the kids do more, I've lost 30 lbs, etc, etc.

Throw away your TV.

<comment><USER6> Just out of curiosity, how old are you kids?

<comment><USER5> 7 and 10 now. When we evacuated for Katrina: son was 6 mo and daughter was 3 yrs. First re-exposure to TV after that 4 month hiatus: right around her 4th birthday.

</comment></comment></comment><comment><USER7> It was only a matter of time until "Area Man" had a blog.

[http://www.theonion.com/articles/area-man-constantly- mention...](http://www.theonion.com/articles/area-man-constantly-mentioning- he-doesnt-own-a-tel,429/)

<comment><USER8> Thank you for that link. No doubt "Area Man" doesn't have a Facebook page or a Twitter account either. :-)

</comment></comment><comment><USER9> Two reasons I won't get rid of my TV:

1\. I like to play my PlayStation 3 on it.

2\. I stream Hulu to it for the few shows I really enjoy (30 Rock, Parks and Rec, Community, Game of Thrones, etc.)

At the end of the day, while my TV may be off most of the time, I still prefer it to watching TV on a smaller monitor.

</comment><comment><USER10> Notice how he/she doesn't use the word movie/film in his rant. How do you expect to watch movies without a TV? A laptop/monitor is not the answer.

I never watch TV shows either except for Mary Tyler Moore on MeTV and Antiques Roadshow occasionally.

<comment> excuse-me "How do you expect to watch movies without a TV?"

You could always print individual I frames onto a transparent substrate and shine a light through it to produce an image on a wall. Not sure what you would call it

<comment><USER3> >> Not sure what you would call it

The funny thing is that the migration of movie theaters from film to digital projectors is basically turning them into giant TVs.

</comment></comment></comment><comment><USER11> Just as a counter point, I gave up TV a little over year ago and nothing changed. Granted, I saved some money on not needing a cable bill, which was nice, but it wasn't a life changing event. I don't feel like I suddenly gained more free time. It's true that I haven't missed it, but I also haven't missed the green pants I gave to Goodwill. I wouldn't tell you to get rid of your green pants if you're getting enjoyment from them.

So, on the one hand, I'll agree with the article. Get rid of your TV. It's not that important. On the other hand, if you feel like keeping it, do so. It's still not that important.

</comment><comment><USER12> I think this guy means "cancel your old-school TV service". My TV is just a large display connected to a PS3.

I'm eliminating:

* scheduling my time around the broadcast schedule of (increasingly sparse) shows I want to watch * going to (increasingly rare and distant) stores to rent movies * going to (increasingly hostile) theaters

</comment><comment><USER13> These are good points, but having gone without a tv for 8 months, there are downsides. There's really nothing that lets you relax without any mental input whatsoever like a TV. It's very effective at that. I found I was more stressed out without at least a tiny bit of TV in my life, albeit only movies and Battlefield 3 on it.

</comment><comment><USER6> The only shows I really watch anymore are the Daily Show / Colbert report, and some HBO offerings(Game of Thrones / True Blood). I tend to catch them online, anyway. There's always Netflix if I really want to watch a movie. I get all my news from the internet.

I'm reluctant to throw mine away since I won two 23" TVs in raffles(i.e. I put in $5 into a hat). The only other use for it is for my Xbox 360, and I don't play video games nearly as much as I used to in college. Instead of watching a bunch of different shows, I happened to find more interesting hobbies to fill the void such as running and flying airplanes. When the weather is too poor to do either of those and no one's around to hang out, though? I'll put a game or a show on and relax.

</comment><comment><USER14> This feels more like an argument against cable/satellite television and not necessarily an argument against having a television.

I think he went a bit overboard. I don't have cable but I still have a TV that I watch a few downloaded shows on.

There's quite a difference

</comment><comment><USER15> When I moved into my current apartment a year ago, I made a conscious decision not to get cable. I've heard people say cable is the path of least resistance to ending boredom and in my experience that's true. Eliminating that path has caused me do other things to end my boredom such as reading a book, exercising, or working on a side project. I don't think it's a coincidence that this past year has been one of the most productive ones of my life.

I still have a TV and a Roku by the way, so I'm not totally disconnected. I still watch movies and shows I'm interested in. By not having cable though, I avoid the time sink of channel surfing and that's been huge for me.

</comment><comment><USER16> tl;dr - I went to college, stopped watching "cable/satellite" TV and I haven't missed it one bit. Though I did keep my televison so I can watch good shows/movies and play games.

Before I left college I was one of those people who watched TV for hours a day, and porbably more than 4-5 hours/day. When I moved into my dorm room I remember being incredibly glad that cable was included in my housing fees because I wouldn't be able to live without it. Basically, what I realized is that the shows and movies I really wanted to watch never came on TV, so I ended up downloading them in HD, sans commercials, and I never missed normal TV one bit.

I'm at home for the summer right now, two years after quitting TV, and I'm trying to get my mom and brother to give it up too. Now I just think TV is damn annoying, mostly because of the commercials.

Side-note: I will be living with some hardcore sports fans next year and it seems to be near impossible to get decent sports coverage without Satellite or Cable.

</comment><comment><USER17> When I moved into my current apartment, I decided not to buy a TV but to instead spend extra money that would have gone toward a TV on a nice large monitor.

This particular monitor lets you also watch TV on it (although I never make use of it; prefer watching digital content), it is possible to hook up video game systems, and I can play DVDs via my computer.

</comment><comment><USER18> Better solution. Just drop cable, save a LOT of money: [http://www.mrmoneymustache.com/2011/05/06/mmm-challenge- cut-...](http://www.mrmoneymustache.com/2011/05/06/mmm-challenge-cut-your- cash-leaking-umbilical-cord/)

(I have only enough cable to make my internet connection cheaper because of Comcast (ugh))

</comment><comment><USER19> I gave up TV 10 years ago. I love it.

</comment><comment><USER20> productivity is in the eye of the beholder. maybe I should sell my computer and watch more tv...

</comment><comment><USER21> Movies.</comment>