您很可能已经听说过Cay S. Horstmann 这个名字。他是 Java 世界中相当知名的人物,也是许多有关我们喜爱的语言的书籍的作者。其中有经典课程《Core Java》(俄文出版于两卷本
《Java.Professional’s Library》一书)和精髓概括系列课程《Java for Impressive》(俄文出版
《Java SE》) 8.入门课程》和
《Java SE 8.基础课程》)。他拥有“Java Champion”的光荣称号。在
此链接中,您可以找到他的旧学校网站,其中包含有趣的信息。
我们提请您注意InformIT资源的一篇文章的翻译,其中 Kay 为初级和继续程序员提出了一些关于如何在其职业中变得更好的技巧。有一天,InformIT 的编辑总监 Jennifer Bortel 请我写一篇关于如何成为一名更好的 Java 程序员的文章。她建议我,作为《Core Java for the Impressive》一书的作者,可能对此有所了解。“没有什么比这更容易的了,买一本书就可以了,”我一开始想。但这个答案不起作用,因为我必须把它装进1500个字,而到目前为止只有62个*(
当然,在翻译文章时,我们并没有试图保持字数——大约翻译)。我最近收到了一位开发人员朋友发来的电子邮件,他在面试中被问及为什么以下代码不是线程安全的:
class ThreadSafeClass extends Thread
{
private static int count = 0;
public synchronized static void increment()
{
count++;
}
public synchronized void decrement()
{
count--;
}
}
我的朋友认为这个例子中的代码是线程安全的,我同意他的观点,并指出第二个方法中缺少一个关键字
static
,一旦插入,访问就由类对象的内置锁控制。我还说过这不是一个好的面试问题,因为如果您需要线程计数器,最好使用
AtomicInteger
. 但半夜我醒了,想知道:如果这个词因为
static
某种原因被遗漏了怎么办?也许某些狡猾的面试官故意以这样的方式构建这个例子来误导应聘者?于是我回信给提出这个问题的开发人员,说我之前可能错了:在一个叫做面试问题的平行宇宙中,这个问题的答案是:“第二个方法包含一个对象锁。” 在回答完这个问题后,那家伙问我是否经营一个 YouTube 频道,在那里我教如何处理这些类型的面试问题。唉,我不做这个。我教授计算机科学并写书,但我的主要目标不是成为更好的“面试问题解决者”,而是让我的学生成为更好的程序员。曾几何时,
Peter Norvig(
美国人工智能领域科学家、谷歌研究总监——约译)在他的博客上写了一篇精彩的文章。他认为那些承诺在 24 小时或 21 天之内教你 Java 的书简直是荒谬的。很难不同意他的观点:成为任何领域的专家都需要 10 年,或者也许 10,000 个小时。众所周知,专家处理信息的方式与新手不同。在一个经典的实验中,经验丰富的国际象棋棋手和新手国际象棋棋手都会看到一个棋盘,棋盘上的棋子有一定的排列方式,持续几秒钟,然后将其隐藏并要求按原样排列棋子。初学者并不能很好地应对这项任务,但专家则没有任何问题。但前提是有一个重要条件:
棋子的排列必须符合真实的棋局。如果棋子是随机放置的,那么专家在重建棋盘方面并不比新手更好。
这就是为什么我完全按照我的方式回答了信中的问题。我的背景是实际编程,而不是面试,所以我本能地添加了缺失的关键字并得出了“错误”的结论。我想在我解释了发生的事情以及为什么我永远不会在没有我的添加的情况下编写像示例这样的代码之后,我仍然会被雇用。或许,如果这样的答案不能让他们满意,我自己也不会愿意和他们合作。 |
现在,我不认为学习认证考试或面试会让你成为一名更好的程序员。我也确信,购买大量有关编程的书籍,然后从头到尾地阅读它们也是行不通的(尽管我,作为这些书的作者,不愿意承认这一点!)。
事实上,成为一名更好的程序员的一个真正好的方法是创建尽可能多的软件。我有时会在大学教授计算机科学入门课程。这是迄今为止我教过的最难的课程。甚至比研究生课程还难。当我刚开始担任年轻教授时,我勤奋地给学生讲课,尽职地讲授编程问题,例如循环
for
和
while
循环之间的区别
do
。然后我给学生分配了四个为期三周的项目。从一开始,所有大学就以这种方式教授这门课程。在我第一次尝试之后,第二学期课程的老师抱怨说,我以前的大多数学生在第一学期的编程之后甚至都没有真正理解简单的循环。而这样的结果,从古至今也一直在发生。还记得文章
“FizzBuzz 或为什么程序员不能编程”吗?当你学习外语时,大多数任务都是练习和实践,而不是理论。将知识“推”入潜意识极其重要。当你不再需要积极思考每个循环或(对于法语)每个不规则动词时,转折点就出现了。如果这一刻已经到来,那么您就已经准备好进入下一个阶段了。这个想法并没有什么革命性的。
一切的关键是即时反馈。一些心理学家认为,通过基于计算机的学习和即时反馈,我们可以做更多的事情。 例如,在另一个经典实验中,有抱负的实习飞行员接受了一次训练,要求他们一遍又一遍地查看仪表板并描述飞机的运动。同时,他们会收到即时反馈,表明他们做得是否正确。经过两个小时的训练,他们的表现超越了经验丰富的飞行员。当然,这并不意味着他们可以立即被送上真正的航班,但他们不再对仪表板上五花八门的仪表盘感到紧张。
所以,如果你刚刚开始学习Java,做大量的练习来练习是最好的主意。有大量网站和在线课程可以自动检查代码的正确性。选择一个能够提供真正挑战而不是官样文章的内容。毕竟,您希望您的潜意识擅长您在实践中实际编写的代码。这就是为什么我不太热衷于使用人为情况的编程示例,例如具有喵叫和吠叫方法的动物类。一段时间后,您将掌握编程的基础知识。要进入下一个级别,您可以编写几个项目。几年前,InformIT 门户向经验丰富的程序员提出了一个问题:“程序员学习新语言的最佳方式是什么?” 如果我们总结他们的答案,我们可以得出以下结论:“在您当前的项目中使用这种语言。”
所以,想想你一直想实现什么——然后继续吧。 二十年前,当 Java 还很年轻的时候,我的朋友、有时是合著者的加里·
康奈尔(Gary Cornell)打电话给我说,“凯,我们要写一本关于 Java 的书。” 我的回答是,我和他都对这个 Java 一无所知,他反驳道:“那又怎样?我们已经达成了图书交易。” 没事做。
我们必须抓紧时间,因为有人宣布《24 小时内教你自己成为 Java 傻瓜》一书即将发行……我想它的名字是这样的(
Kay 取笑“For Dummies”系列书籍) - “for dummies” “Dummy”一词可以翻译为“dummy” - 译者注)。为了学习一门新语言,我从项目开始 - 编写一个为退休计划创建用户界面的程序,然后编写一个连接到天气站点并显示天气预报的程序。之后 - 一个模拟汽车在高速公路上移动的程序。当时,这些节目简直太棒了!
java.awt
java.net
и нити (
threads
). И я должен был узнать, How на самом деле заставить всё это работать, а не только то, что написано в documentации. В то время это были совершенно разные вещи. Вот почему книга
«Core Java» [1] стала хитом: она была не «для чайников».
В то время изучать Java было гораздо сложнее. У нас не было таких сайтов, How
Stack Overflow (
и JavaRush тоже не было, — прим. ред.). На этом моменте я перехожу к формулировке следующего совета по улучшению вашего программистского «скилла». Итак, когда вы будете работать над собственным проектом, вы обязательно где-нибудь застрянете.
В таком случае идите на специализированный форум и пытайтесь найти ответы. Поверьте, это — отличная идея. Сначала вы будете задавать вопросы, которые до вас уже спрашивали многократно. Но вскоре вы наберётесь знаний, и ваши вопросы станут более уникальными. Это потрясающий способ учиться! Конечно, речь не о том, чтобы просто скопипастить кусок codeа и спросить: «И что мне теперь с этим делать?». Нужно докопаться до сути, пояснить, Howие попытки решить задачу вы уже сделали прежде, чем застрять. Кстати, в большинстве случаев, пока я формулирую вопрос в письменном виде, я сам нахожу ответ и мне остается лишь сказать самому себе: «Да что тут за проблема, всё и ежу понятно» ещё до того, How я отправил вопрос. Но даже если этого не произошло… Поверьте, продуманные вопросы, How правило, привлекают вдумчивые ответы. Только не забывайте возвращать социальный должок, отвечайте на вдумчивые вопросы других людей. И формулировка вопросов, и ответы на вдумчивые вопросы делают вас лучшим программистом. «Так, а что с книгами? — спросите вы. — Неужели благодаря
Google и
Stack Overflow они окончательно и бесповоротно устарели?». Всякий раз, когда я пробираюсь через дебри новой технологии, я полагаю, что я — мужественный человек, и смогу побороть все сложности в одиночку. Но час бессмысленных мучений сменяет час здравомыслия — и я покупаю книгу. В настоящее время технические книги — потрясающе выгодное предложение. Если я заплачу 40 долларов за электронную книгу и получу быстрый ответ только на один вопрос, я уже верну потраченные деньги. Мне неприятно разочаровывать своих коллег по перу, но я ни разу не читал технические книги от начала до конца. Я начинаю с того места, где, How мне кажется, расписана моя проблема и ее решение, и я читаю до тех пор, пока не пойму, How её решить. По этой причине, в настоящее время я стараюсь писать книги, которые можно читать именно так. Такой подход породил серию «Для нетерпеливых». И на этом моменте мне следует остановиться — я превысил редакторский лимит в 1500 слов.
Добавлю только, что чтобы стать лучшим программистом, начните с признания того, что существует много уровней знаний.
- 首先,将基本语言结构“拉”入你的潜意识,即通过解决大量练习将其知识自动化。
- 尽快开始从事您感兴趣的实际项目。
- 然后加入一个您可以提问和回答问题的社区。
- 一旦你做到了这一点,你将能够在面试中用知识和经验说话。你是否解决了这个人为的谜题并不重要。
GO TO FULL VERSION