「さよならジュピター」が入手困難な状態だというのを今日の新聞のコラム記事で知ったわけなんですが
技術書と小説という違いはあるにせよ、
向こうの人はなぜこうも気軽に(そう見える)公開できるのでしょうか?
あるいはその裏返しとして、日本でできないのはなぜ?
さいとの備忘録 : 『省メモリプログラミング』 - livedoor Blog(ブログ)
の日付を見るに割と以前からこの状態で公開されていたようですが、
例によって reddit 効果により数日前に知りました
http://www.reddit.com/r/programming/comments/miw3t/small_memory_software_patterns_for_systems_with/
本題の URL はこっち
http://www.smallmemory.com/book.html
日本語訳はこの本。
ジョブスの失われたインタビュー - karasuyamatenguの日記
やらで知ったのですが、抜き出された発言の中でこれが印象に残りました。
Learning to program teaches you how to think. Computer science is a liberal art.
そしてその発言が元で盛り上がってたり。
Quotes from 1995 Steve Jobs
Interview | Hacker News
The one I found most interesting is:
"Learning to program teaches you how to think. Computer science is a liberal art."
It's clear that Jobs had viewed the iPad as being a way to help change education.
Though you can't program on the iPad currently, I have no doubt that it will
eventually come in the future.
Jobs also shared the same belief as Alan Kay. Kay was angered that Scratch wasn't
currently possible under Apple's rules and viewed the Dynabook as a way to teach
children how to code. A comment like this shows that Jobs probably had this in his
mind but wanted to take baby steps with what he probably viewed as the future of Apple.
It could also be that he wanted to get the foundation of iOS correct before moving
into something more complicated as programming.
I wonder if Jobs felt the same way in his later years. I'm guessing he did. With
traditional blue collar jobs disappearing, computer science is becoming an
ever-increasing necessity for the future workforce.
You should read his biography (by Walter Isaacson). The intersection between arts and
technology was a huge point of focus with Jobs.
I'm tempted to generalize this sentence to "Learning (anything) teaches you how to think".
Computing certainly conveys a stronger worldview than, say, skateboarding, but I
really think mastering any activity can be a valuable and profound lesson.
The thing about computer programming is it is unforgiving - your program works or it
doesn't. You cannot talk it, fool it, force it, etc., into working. Learning
programming forces a certain reality check into your learning that is absent from many
other disciplines.
I think it's less about the unforgiving nature of programming and much more about the
immediate and (usually) precise feedback that you get when you fail that makes it so
good at teaching you how to think. I wish every skill I wanted to learn came with a
compiler and a debugger.
One of the differences between computer science and other fields is that, in a sense,
computer science is a meta-field: it's the study of information. You learn how to
solve problems from the very foundation, empirically. In that way it's probably akin
to philosophy, although I don't know enough philosophy to be sure. Basically, instead
of solving problems you're solving the problem of how to solve problems.
This is what makes computer science, along with a few similar fields (mathematics
comes to mind) very special.
Quotes from 1995 Steve Jobs Interview | Hacker News
"Learning to program teaches you how to think. Computer science is a liberal art."
Imagine all the hate the source of this quotation would receive on here if this didn't come from The Steve.
Three of the traditional seven liberal arts (grammar, logic, rhetoric, arithmetic,
geometry, music, astronomy) are today considered branches of mathematics - is it
really so hard to imagine computer science taking a place among these?
And only two of them are today considered humanities, which is what a lot of
non-humanities people seem to be thinking when they say liberal arts.
As someone who briefly attended a liberal arts college, when I hear liberal arts I
understand it to mean something that encourages dance majors to take materials science
courses just as much as vice-versa.
liberal 「art」といってもいわゆる「げーじゅつ」とは違いますよね。と。
とある blog でインタビュー記事が。
インタビューイをぜんぜん知らんのですが(^^;
面白い質問があったりしたので抜き出し。
Enterprise Software Development with Java: The Heroes of Java
The Heroes of Java
There are Rockstars out there. Ninjas or some other kind of guys been given or given
themselves titles like famous and successful members of well know communities.
(略)
I want to read about Heroes rather than agents, fighters or solo artists. This is why I
started interviewing Java people. Some I know. Some you might know. With this first
post in a new series called "The Heroes of Java" I kick off the publishing. New
interviews will appear on an irregular basis and I don't have a final list of people to
ask for answering my questions. But I hope: Some will jump in. A big thanks to those
who already did!
1st Part: Marcus Lagergren
2nd Part: Charles Oliver Nutter
3rd Part: Martijn Verburg
4th Part: Fabiane Bizinella Nardon
5th Part: Cay Horstmann
6th Part: Michael Hüttermann
7th Part: Andrew Lee Rubinger
Enterprise Software Development with Java: The Heroes of Java: Marcus Lagergren
You're still programming in Java. Why?
あなたは Java でプログラミングしていますよね? なぜですか?
"I'm not just programming in Java. I'm programming in everything. I use the most
appropriate tools that get the job done for any given situation. Why am I still
programming in C? Because it gets the job done for certain problem sets. Why am I
still programming in Haskell? OK - that one has more to do with personal sexual
deviancy I guess.
Java でだけプログラミングするわけではありません。なんででもプログラミングします。
わたしは与えられたシチュエーションで仕事を果たすもっとも適切なツールを使います。
なぜわたしは今でも C でプログラミングするのでしょうか?
それは特定の問題の集合に対しては仕事を果たすからです。
なぜわたしは今でも Haskell でプログラミングするのでしょうか?
When it comes to Java as a language it is not going to go away. It is ingrained in a
lot of critical infrastructure in the world. The runtime is also definitely not going
to go away - quite the opposite. If I may inject a blatant commercial plug here, my
book "Oracle JRockit the definitive guide" talks a bit about how Java and
the JVM became such a ubiquitous platform, and what the intrinsics of any such
platform should be."
What's least fun with Java?
Java で一番楽しくないことはなんですか?
"Java code is extremely voluminous - it takes up so much space compared to Scala
or Ruby or Clojure. Any line of Java that I write seems to want to break the 80 character
boundary. Really simple things are missing as well, for example, there are no implicit
ways of initializing a map or a collection, boilerplate getter and setter code for every
field needs to be in place and so on.
Java のコードはとても大きいもので、Scala や Ruby、Clojure と比べてとても多くのスペースを占めます。
わたしの書いた Java の行すべてが 80桁で改行することを望んでいるように思えます。
本当に単純なものが欠けていて、たとえば map や collection を暗黙に初期化する方法だとか
すべてのフィールドに対する getter や setter の boilerplate のコードを置く方法といった
ものがありません。
My main language feature frustration is lack of lambdas. Also, religiously, I've
always been strictly against camel case in any setting. This goes back to Smalltalk ;)
言語機能についてわたしが主に感じる不満は、lambda の欠如です。
また、すべての設定において常に strict に camel case であることも不満です。
Type erasure can also be irritating. I guess one of the design rationales behind
generics was that the implementation only needed to change the compiler. Surprisingly
enough it also turns out that compiling certain type relationships in Java is
undecidable. As someone who majored in theoretical computer science this is sort of
like an itch in my brain that won't go away."
If you could change one thing with Java, what would that be?
もし Java に関して何かひとつ変えることができるとしたら、何を変えますか?
"For the language: lambdas and more compactness a la project Coin. We are on the
way there and I think Java 8 will get rid of a significant part of the frustrations.
For the JVM specification: replace bytecode with something that works better as a generic
intermediate language for a multi language JVM. I think bytecode will, even despite
invokedynamic, soon turn out to be a bottleneck between the program and the runtime.
I rant a bit about it in my book. "
What's your personal favorite in dynamic languages?
あなたが個人的に好きな動的言語はなんですか?
"I like Ruby and Clojure lot. As I'm going to start contributing to Oracle's Nashorn
project now, I guess I'll have to teach myself to like Javascript as well. I will put
myself through the same proven brainwashing process as when I taught myself to appreciate
country music, a skill that was necessary to acquire after marrying my wife."
Which programming technique has moved you forwards most and why?
あなたをもっとも前進させたプログラミング技法はなんですか? またそれはなぜですか?
"Being the nightmare of anyone who wants to define a "process" or
"technique" in software, I must ask you to define "programming
technique" better.
I'll give it a shot anyway - how do I quickly write code that works and is robust?
Any code that contains sanity checks turns out to be good code: get into the habit of
doing things like putting assertions absolutely everywhere without thinking about it.
Make sure new features have tests. If you consider something "untestable"
you are doing it wrong. Make it testable! You might even have to write some kind of
whitebox API that exposes system internals for the test framework to get a test
written. In that case, so be it. Do it!
If you fix a bug by painstakingly whittling a reproducer down to a small deterministic
bit of code - make sure to turn it into a unit test, tag it with a bug number and get
it into the test suite so you'll never have to do this again.
When programming, avoid explicit parallelism. Things like actors, the fork/join
framework or NSOperationQueue:s in Cocoa help out.
Understand memory management.
Measure and understand where your application spends its time and why.
Finally, whenever you can: be stateless or use functional programming. This saves
debugging time and produces fewer bugs."
Enterprise Software Development with Java: The Heroes of Java: Charles Oliver Nutter
Java
You're programming in Java? Why?
"Java is the best language for the work I'm doing. I define the work I'm doing as
"bending the JVM to Ruby's whim's." I also freqently write in Ruby, and we
have started transitioning more JRuby code from Java to Ruby recently."
What's least fun with Java?
"The amount of typing required to do pretty much everything. It could certainly
be worse, though...it could be C/++."
何をするにもたくさんタイプすることを要求されること。
If you could change one thing with Java, what would that be? "My two top features
for the Java language would be closures and type inference. We should get the former
in Java 8, but for the latter I will probably need a different language (like Mirah,
my other language project)."
You might say that I want C# but with a Java sensibility (virtual-by-default, for example).
What's your personal favorite in dynamic languages?
"Ruby is my favorite dynamic langage. I also like Clojure from a design perspective, but
I find the language itself (mostly the syntax) to be uglier than I would like."
Which programming technique has moved you forwards most and why?
"If I had to pick one I'd say "refactoring." Few problems I run into
can't be solved by doing an in-place refactoring. That's one reason I use less Ruby
than Java...all but the most trivial refactorings in Ruby are very difficult to do
safely...or at least very difficult compared to pressing a button in a Java IDE."
Which was the worst programming mistake you did?
"For a short time I was the lead developer of LiteStep (desktop replacement for
Windows' "Explorer" environment), and helped orchestrate a large-scale
refactoring and rewrite of its C codebase to be more modular and easier to extend. I
made a good decision in pushing toward a set of pure-virtual C++ interfaces for key
pluggable aspects, but I was wrong to try to go all the way to a COM-based solution
with a team that barely understood C++ in the first place. Subsequent leads backed
down that bad decision, but kept the overall structure...so I'm satisfied it worked
out ok."
Copyright © 2007-2011 by Markus Eisele.. Powered by Blogger.
Enterprise Software Development with Java: The Heroes of Java: Martijn Verburg
Java
You're programming in Java. Why?
"I started out with it because I had to teach it at university to the year below
me. I was mainly doing C++ at the time and Java quickly convinced me that it was a
more productive language due to its memory management. I've stuck with it because of
the incredible ecosystem that's sprung up around it and the fact that it's easy to
read (most developers spend more of their time reading code than writing it). I've
recently picked up smatterings of Scala, Groovy and Clojure - I see some exciting
trends in polyglot programming coming up."
What's least fun with Java?
"Some of its verbosity could be reduced whilst still maintaining readability and
of course functional programming is difficult, but hey - it's an OO language :-). It's
nice to see the language moving forwards again and hopefully Project Coin can bring
about more reduced syntax and the lambda JSR can open up some limited but useful
functional aspects to it.
Oh yeah, and XML processing is still pretty annoying."
If you could change one thing with Java, what would that be?
"Modularisation (which is actually going to happen in Java 8 in one shape or
another) - the CLASSPATH is less than ideal and constantly trips up people trying to
learn the language. It would also give developers more freedom and more choice and be
a huge boost for 'Java everywhere' - the possibilities are endless!"
What's your personal favorite in dynamic languages?
"Groovy - I love it's implicit goal of making life easier for the developer and
it's interop with Java combined with features like it's XML processing, make it a
great instant productivity tool."
Which programming technique has moved you forwards most and why?
"KISS - having small, tested units/modules of code has saved me time and time
again. Also naming things properly."
Which was the worst programming mistake you did?
"It's rumoured that I took down all of the Comp Sci servers at my university when
a networking/hard disk re-writing bot of mine went astray - I was _not_ a popular
student that day.
I've made plenty of other mistakes, even self submitted to the dailywtf on one
occasion! My motto is to have no fear when coding and to simply strive to improve
every time you set down in front of your IDE."
Copyright © 2007-2011 by Markus Eisele.. Powered by Blogger.
Enterprise Software Development with Java: The Heroes of Java: Fabiane Bizinella Nardon
Java
You're programming in Java. Why?
I like the language and all the possibilities it brings. I love how many open source
tools and frameworks are available in the Java universe. Java has also an awesome
ecosystem, with JUGs, communities, multiple languages, conferences and so on. It is a
very collaborative environment and I always felt welcome in the Java community.
What's least fun with Java?
Compiling and redeploying applications :-) . If you worked with dynamic languages, you
realize how more productive you can be if you can skip these steps. Of course, there
are frameworks and tools that allow you to do this with Java, but these are not always
available.
If you could change one thing with Java, what would that be?
I would remove the need for getters and setters and make the language less verbose.
What's your personal favorite in dynamic languages?
Groovy.
Which programming technique has moved you forwards most and why?
If I think about my whole career, I have to say "Object Oriented Programming",
for the obvious reasons. But the technique that I think made me a better programmer
was defensive programming. My software is a lot more reliable because of it.
Which was the worst programming mistake you did?
There were so many... hard to choose :-) But I remember one situation that was kind of
embarrassing. I was creating a software to visualize medical images for a large
hospital. After finishing my code, I was over confident and decided to test it
directly against the production database. Of course, there was a memory leak and I
took the whole hospital down for about half an hour. This was a long time ago and I
learned my lesson.
Copyright © 2007-2011 by Markus Eisele.. Powered by Blogger.
Enterprise Software Development with Java: The Heroes of Java: Cay Horstmann
Java
You're programming in Java. Why?
I used to program in C and C++, and when Java came along, I thought "No garbage
collection? cross-platform libraries that actually do stuff (i.e. GUIs, database)?
Where do I sign?"
わたしが C や C++ でプログラムしていていました。そして Java が世に出たとき
こう考えたのです
「ガーベジコレクションがない? GUI やデータベースのように actuall do stuff な
クロスプラットフォームライブラリ? わたしがサインするのはどこ?」
That was in 1996. It's hard to remember how far ahead of its time Java was of its
commercial rivals.
Then Java became open-sourced, which it means that it will live forever once those
wretched patents expire.
To make me move off the JVM, you'd have to offer me an open-source cross-platform
alternative with more/better libraries than in the Java universe. Let me know if you
find one.
As for the Java language, I use Scala for new projects when I can. It's more fun.
What's important is that it runs on the JVM and interoperates with Java libraries.
What's least fun with Java?
The "stack trace from hell" in Java EE.
If you could change one thing with Java, what would that be?
もし Java に関して何かひとつ変えることができるとしたら、何を変えたいですか?
Properties
Which programming technique has moved you forwards most and why?
I'd like to say "functional programming" because it is fun to build very
generic and reusable mechanisms, but the truth is much more boring.
「関数プログラミング」ですね。
なぜなら、非常に generic で reusable な機構を構築するのが楽しいからです。
しかし真実はもっと退屈です。
1) Strong typing. 強い型付け
In the bad old days of pre-ANSI C, I wasted an enormous amount of time with runtime errors.
You could call fread with the parameters in the wrong order, and it compiled, ran, and
flaked out. If you were lucky, you got a core dump. C++ changed my life. It took forever to
shut up the compiler, but when a program ran, it actually had a fair chance of doing the
right thing. My productivity multiplied.
2) VM bounds checks and garbage collection. VM による境界検査とガーベジコレクション
In the bad old days of C and C++, I wasted an enormous amount of time with memory
allocation bugs. In Java, all that went away in an instant. My productivity multiplied.
I am lucky to have had this effect twice in my lifetime. Note that it came from
changing from "really bad" to "ok", not from "good" to
"great".
Where could similar improvements come from in the future? Here are a few suggestions.
- Get rid of the stack trace from hell
- Get rid of callbacks/event driven programming in client-side UIs and web apps
- Make concurrency less painful
Which was the worst programming mistake you did?
To follow the official specifications when trying to port that word processor to Windows.
I should have reverse engineered Word to find the undocumented OS calls that were
necessary to get continuous line breaking at an acceptable speed. That mistake taught me
something about the value of open specifications and open source.
Copyright © 2007-2011 by Markus Eisele.. Powered by Blogger.
Enterprise Software Development with Java: The Heroes of Java: Michael Hüttermann
Java
You're programming in Java. Why?
Java is an all-purpose business language but also a platform and a set of APIs. This
makes up a great ecosystem and a great, mature infrastructure. The language Java is
powerful and innovative, and thanks to Oracle, it's developed further in an attractive way.
Java は all-purpose business な言語であるだけでなく、プラットフォームでもAPIの集合でもあるからです。
このことは Java を great なエコシステムと、great かつ重要なインフラにしています。
言語としての Java は強力であり、innovative です。
また、Oracle のおかげで開発が attractive way で進められています。
What's least fun with Java?
Java is slow. Stop, that was a joke, sorry about that, although I still hear this
statement from time to time. Honestly: the bootstrapping process is sometimes
suboptimal meaning achieving first good solutions while starting from scratch. Here I
don't mean to hack together some HelloWorld classes to show that an API works, rather
to design and code enterprise-ready solutions in a real- world project context.
If you could change one thing with Java, what would that be?
Java is moving forward, that's good. Instead of dreaming of new specific features for
next Java versions, I more prefer improvements in the process itself that should result
in transparent, collaborative and frequent new Java versions. JCP.next/JSR348 is a very
good step in this direction, and Oracle does a great job in bringing Java to the next
level. What I’d like to add regarding specific new future Java features: as a matter
of fact, having Java on the market for so many years now, any new language feature can't
be that killer feature that would save the world. Additionally, using other languages on
the JVM already enables us to use other features and other styles without using the
language Java itself.
What's your personal favorite in dynamic languages?
First answer is Groovy because of it's powerful adoption level and ecosystem, for instance
the build system Gradle. Abstracting away from the typing system, also Scala is a
"dynamic language" for me in its classic sense. That's the reason why I cover
these two languages, Groovy and Scala, in my book "Agile ALM". I find it helpful
to develop solutions in a collaborative, dynamic way, and to set up a mash-up of tools
and languages that best fit to a given task. That's what makes up an Agile AlM.
Which programming technique has moved you forwards most and why?
It's more a zoo of many different complement techniques instead of the one that rules
them all. Many agile practices influenced me including TDD and pair programming. On a
meta level, the technique of "continuous improvement" adds much value by
reviewing what you and the team have done continuously. Of course there are many other
influencing aspects. One crucial aspect is experience.
Which was the worst programming mistake you did?
Generally, the next one is always the most annoying. :-) Hopefully many of the defects
are identified early by the respective process, thus a mistake should never become
"the worst one", rather just a learning opportunity. You should also keep in
mind that a “mistake” is often just the result of a wrong or incomplete
understanding, of requirements for example, or a defect in the development process.
The worst case that can happen with mistakes is that you and the team repeat them:
repeating mistakes is really something that you should avoid.
Copyright © 2007-2011 by Markus Eisele.. Powered by Blogger.
Enterprise Software Development with Java: The Heroes of Java: Andrew Lee Rubinger
Java
You're programming in Java. Why?
I started in Java, and it hasn't lost its relevance.
わたしは Java から始めましたし、Java はその妥当性を失っていないからです。
What's least fun with Java?
Java the language is verbose by today's standards, and lacking some key properties
we've seen in newer stabs. Reified generics, immutability by default, and compiler
support for hierarchical metadata are exciting concepts.
Java は今日の標準からすると冗長です。また、わたしたちが newer stabs でみるような
いくつかのキーとなる属性に欠けています。
ジェネリクスの具体化、デフォルトとしての immutability、
階層的なメタデータに対するコンパイラーのサポートといったものは exciting concepts です。
Java the standard library is riddled with complex or unintuitive APIs which we cannot
ditch due to backwards-compatibility constraints. I also tend to dislike mechanisms
which rely upon command-line options, one-time-only initialization, or other aspects
which tie into the environment too tightly and make testing difficult.
Java the runtime, however, is just now beginning to stretch its wings.
If you could change one thing with Java, what would that be?
I honestly wouldn't seek to change the language too much. It's important that Java
remain a nice common denominator that's familiar to all, while at the same time we
expand upon the support for other JVM languages.
What's your personal favorite in dynamic languages?
I don't have one. Rather, if there are things I like about dynamic languages, the lack
of static typing is not one of them. Passing functions as arguments is something I've
always liked, however.
Copyright © 2007-2011 by Markus Eisele.. Powered by Blogger.
かなり削っても量的にきつかった ○| ̄|_