Para tentar tirar um pouco da poeira do blog, replico aqui o post de Matt Might sobre como manter uma atividade de escrita mesmo fazendo um PhD, trabalhando e cuidando da família.
“I don’t have time,” is the worst excuse not to blog.
Yet, I hear it often from fellow academics.
My advisor from grad school recently asked, “How can you write tons of papers and grant proposals, teach your classes, advise students, take care of your family and still have time to blog? Where does that time come from?”
Embedded in his question is an assumption that blogging has to take time.
Were this true, I couldn’t recommend it Ph.D. students or pre-tenure profs.
The secret to low-cost academic blogging is to make blogging a natural byproduct of all the things that academics already do.
- Doing an interesting lecture? Put your lecture notes in a blog post.
- Writing a detailed email reply? “Reply to public” with a blog post.
- Answering the same question a second time? Put it in a blog post.
- Writing interesting code? Comment a snippet into a post.
- Doing something geeky at home? Blog about what you learned.
I’ll save an argument for the benefits of academic blogging for another post. For now, I’ll argue that those benefits need not be high to overcome the cost.
Read below for my efficient blogging strategies.
Tip 1: Lecture as post
A favorite gripe of junior professors is that teaching is a waste of their time.
Excellence in teaching buys no credit for tenure at many universities.
(Of course, putrid teaching can derail a tenure case.)
Teaching is an opportunity to convert lecture notes into blog posts and external evangelism. The conversion usually polishes a lecture too.
It’s hard to teach a class without creating lecture notes.
Why not write those lecture notes as a blog post?
- First-class macros in meta-circular evaluators.
- A lambda-calculus interpreter in C++ templates.
- Compiling Scheme to C.
- Compiling Scheme to Java.
Tip 2: “Reply to public” as post
Many of the academics that “don’t have time to blog” seem to have plenty of time to write detailed, well-structured replies and flames over email.
Before pressing send, ask yourself, should this answer be, “Reply,” “Reply to all,” or “Reply to public”?
If you put effort into the reply, don’t waste it on a lucky few. Share it.
Of course, “reply to public” is not limited to email. A few of my recent posts started on Quora. If I still used Usenet, I bet the same would be true there.
- This post.
- 3 qualities of successful Ph.D. students.
- Greasemonkey scripts for Apply Yourself.
- Why guaranteed file compression is impossible.
Tip 3: Advice as post
I hear some questions with alarming repetition. To name a few:
- What is grad school like?
- How many years does a Ph.D. take?
- How can I get into grad school?
- How should I structure a thesis proposal?
Any question asked more than once is a candidate for a blog post.
- The illustrated guide to a Ph.D.
- HOWTO: Get into grad school.
- A thesis proposal is a contract.
- Productivity tips for academics.
Tip 4: Vented steam as post
My colleague, Suresh Venkatasubramanian, claims that the need to vent steam is his preferred reason for posting.
Blogs are a way to safely let it out, assuming appropriate diplomacy.
- The CRAPL: An academic-strength open-source license.
- American Airlines sucks.
- Why peer reviewers should use Tor.
Tip 5: Blog as code repository
I used to be great at starting coding projects, but terrible at finishing them.
That changed when I started posting code on my blog.
Posting my code on my blog forces me to do three things:
- It makes me refactor my code into a clean design.
- It makes me comment my code sufficiently.
- It makes me search for the most concise solution.
I’ve stopped rewriting code, because I reuse the code I post on my blog.
At the same time, I’ve picked up months-old projects and continued them.
Now when I write code, I look for ways to turn parts of it into a blog post.
- Matching regular expressions with derivatives.
- A nonblocking lexing toolkit based on derivatives.
- A pipelined nonblocking webserver in Scala.
- A reference implementation of k-CFA.
Tip 6: Blog as long-term memory
There are lots of things I used to know, but forgot.
When I find myself relearning something for the second time, I write a blog post on it, so that I won’t have to relearn it again.
I often write these up as a HOWTO.
- HOWTO: Make cat 5 network cables.
- HOWTO: Rip a DVD.
- HOWTO: Create an online book catalog.
- HOWTO: Fix mold and allergy problems.
A few more tips
I have a few miscellaneous tips for busy academic bloggers:
- Don’t blog before a deadline.
- Don’t post too frequently.
- Don’t feel pressure to post with regularity. Twitter and RSS can alert your readers.
- Don’t spend too much time on a post. It doesn’t have to be as polished as something you submit for peer review. I don’t even spell-check.
- Do store up posts if you have free time. Release when you’re busy.
- Don’t submit your own work to social news sites. If you write well enough, others will do it for you.
- Don’t feel the need to have comments. I get plenty of constructive, meaningful interaction with my readers over twitter and email.
Academic blogs I like
- Dave Herman’s The Little Calculist. I point this out to my students as a great example of grad student blogging as note-taking. (Dave recently finished his Ph.D., but he’s given this blog to himself and to the community forever.)
- John Regehr’s Embedded in Academia. John’s posts are much more polished than mine, and they’re entertaining, educational and thorough as a result. His posts are great outreach and service to the field. He nails the post-tenure associate professor blog perfectly.
- Suresh Venkatasubramanian’s geomblog. Suresh’s blog is a great mixture of field-specialist and pan-academic writing. There’s something worth knowing in every post.
- Daniel Lemire’s blog hits topics ranging from his own research interests to broader academic concerns. He thoughtfully compresses many of his posts into small, bite-sized form.
- Dick Lipton’s blog does a major service to theory of computation, because he spends time writing engaging, thoughtful and accessible articles. Dick does the esteemed yet friendly full professor blog well.
Após quase um mês de aulas no doutorado do CIN, percebi o quanto estou enferrujado em alguns princípios básicos de cálculo. Durante a minha graduação cursei 4 disciplinas de cálculo, 3 de álgebra e 1 de estatística. Mesmo assim, senti uma dificuldade enorme em acompanhar as primeiras aulas – em grande parte, pelo tempo que passou entre a graduação e o meu novo contato com o mundo dos números. Mas o principal motivo foi o simples fato que nunca precisei utilizar esses conhecimentos na minha carreira como analista de sistemas. Esse assunto veio à tona quando li o post de Alan Skorkin falando exatamente sobre os problemas que estou enfrentando agora. Vale a pena dar uma olhada.
You Don’t Need Math Skills To Be A Good Developer But You Do Need Them To Be A Great One
A little while ago I started thinking about math. You see, I’ve been writing software for quite a few years now and to be totally honest, I haven’t yet found a need for math in my work. There has been plenty of new stuff I’ve had to learn/master, languages, frameworks, tools, processes, communication skills and library upon library of stuff to do just about anything you can think of; math hasn’t been useful for any of it. Of course this is not surprising, the vast majority of the work I’ve been doing has been CRUD in one form or another, that’s the vast majority of the work most developers do in these interweb times of ours. You do consulting – you mostly build websites, you work for a large corporates – mostly build websites, you freelance – you mostly build websites. I am well aware that I am generalising quite a bit, but do bear with me, I am going somewhere.
Eventually you get a little tired of it, as I did. Don’t get me wrong it can be fun and challenging work, providing opportunities to solve problems and interact with interesting people – I am happy to do it during work hours. But the thought of building yet more websites in my personal time has somewhat lost its luster – you begin to look for something more interesting/cool/fun, as – once again – I did. Some people gravitate to front-end technologies and graphical things – visual feedback is seductive – I was not one of them (I love a nice front-end as much as the next guy, but it doesn’t really excite me), which is why, when I was confronted with some search-related problems I decided to dig a little further. And this brings me back to the start of this story because as soon as I grabbed the first metaphorical shovel-full of search, I ran smack-bang into some math and realized exactly just how far my skills have deteriorated. Unlike riding a bike – you certainly do forget (although I haven’t ridden a bike in years so maybe you forget that too ).
Learning a little bit about search exposed me to all sorts of interesting software-y and computer science-y related things/problems (machine learning, natural language processing, algorithm analysis etc.) and now everywhere I turn I see math and so feel my lack of skills all the more keenly. I’ve come to the realization that you need a decent level of math skill if you want to do cool and interesting things with computers. Here are some more in addition to the ones I already mentioned – cryptography, games AI, compression, genetic algorithms, 3d graphics etc. You need math to understand the theory behind these fields which you can then apply if you want to write those libraries and tools that I was talking about – rather than just use them (be a producer rather than just a consumer – to borrow an OS metaphor ). And even if you don’t want to write any libraries, it makes for a much more satisfying time building software, when you really understand what makes things tick, rather than just plugging them in and hoping they do whatever the hell they’re supposed to.
The majority of developers will tell you that they’ve never needed math for their work (like I did a couple of paragraphs above ), but after musing on it for a while, I had a though. What we might have here is a reverse Maslow’s hammer problem. You know the one – when you have a hammer, everything looks like a nail. It is a metaphor for using a favourite tool even when it may not be best for the job at hand. Math is our hammer in reverse. We know the hammer exists but don’t quite know how to use it, so even when we meet a problem where our hammer would be the perfect tool, we never give it serious consideration. The screwdriver was good enough for my granddaddy, it was good enough for my daddy and it is good enough for me, who needs a hammer anyway? The trick with math is – people are afraid of it – even most programmers, you’d think we wouldn’t be, but we are. So, we turn our words into a self-fulfilling prophecy. It’s not that I don’t need math for my work it’s just that I don’t really know it and even if I do, I don’t know how to apply it. So I get by without it and when you make-do without something for long enough, after a while you don’t even notice it’s missing and so need it even less – self-fulfilling prophecy.
Here is some food for thought about something close to all our hearts – learning new skills. As a developer in the corporate world, you strive to be a generalizing specialist (read this book if you don’t know what I am talking about). You try to be decent at most things and really good at some. But what do you specialize in? Normally people choose a framework or two and a programming language and go with that, which is fine and worthwhile. But consider the fact that frameworks and to a lesser extent languages have a limited shelf life. If you’re building a career on being a Hibernate, Rails or Struts expert (the struts guys should really be getting worried now ), you will have to rinse and repeat all over again in a few years when new frameworks come along to supersede the current flavour of the month. So is it really the best investment of your time – maybe, but then again maybe not. Math, on the other hand is not going away any time soon. Everything we do in our field is built upon solid mathematical principles at its root (algorithms and data structures being a case in point), so time spent keeping up your math skills is arguably never wasted. And it, once again, comes down to really understanding something rather than just using it by rote – math can help you understand everything you do more deeply, when it comes to computers. Infact, as Steve Yegge said, what we do as programmers is so much like math we don’t even realise it.
What/Who Makes A Difference
You don’t believe me, then consider this. Most of the people who are almost universally respected in our field as great programmers are also great mathematicians. I am talking people like Donald Knuth, Edsger W. Dijkstra, Noam Chomsky, Peter Norvig. But then again these guys weren’t really developers, they were computer scientists, so it doesn’t really count right? I guess, but then again, maybe we shouldn’t really talk until our output in pure lines of code even begins to approach 10% of what these people have produced. Of course, you can be successful and famous without being a boffin, everyone has heard of Gavin King or DHH. That’s kinda true (although it’s an arguable point whether or not many people have heard of Gavin or DHH outside their respective niches), but “heard of” and universally respected are different things, about as different as creating a framework and significantly advancing the sum-total of human knowledge in your field (don’t get me wrong, I respect Gavin And David, they’ve done a hell of a lot more than I have, but that doesn’t make what I said any less of a fact). How is all of this relevant? I dunno, it probably isn’t, but I thought I’d throw it in there anyway since we’re being introspective and all.
The world is getting filled up with data, there is more and more of it every day and whereas before we had the luxury of working with relatively small sets of it, these days the software we write must operate efficiently with enormous data sets. This is increasingly true even in the corporate world. What this means is that you will be less and less likely to be able to just “kick things off” to see how they run, because with the amount of data you’ll be dealing with it will just grind to a halt unless you’re smart about it. My prediction is that algorithm analysis will become increasingly important for the lay-programmer, not that it wasn’t before, but it will become more so. And what do you need to be a decent algorist – you guessed it, some math skills.
So, what about me? Well, I’ve decided to build up/revive my math skills a little bit at a time, there are still plenty of books to read and code to write, but I will try to devote a little bit of my time to math at least once in a while, because like exercise, a little bit once in a while, is better than nothing (to quote Steve Yegge yet again). Of course I have a bit of an ace up my sleeve when it comes to math, which is good for me, but luckily with this blog, we might all benefit (I know you’re curious, I’ll tell you about it soon ).
Where Do You See Yourself In 5 Years
So, is all this math gonna be good for anything? It’s hard to say in advance, I am pretty happy with where I am at right now and so might you be, but it’s all about potential. End of the day, if you’re a developer in the corporate world you don’t really need any math. If you’re happy to go your entire career doing enterprise CRUD apps during work hours and paragliding or wakeboarding (or whatever trendy ‘sport’ the geeky in-crowd is into these days) during your off time then by all means, invest some more time into Spring or Hibernate or Visual Studio or whatever. It will not really limit your potential in that particular niche; you can become extremely valuable – even sought after. But if you strive for diversity in your career and want to have the ability to try your hand at almost any activity that involves code, from information retrieval to Linux kernel hacking. In short if you want to be a perfect mix of developer, programmer and computer scientist, you have to make sure you math skills are up to scratch (and hell, you can still go wakeboarding if you really want ). Long story short, if you grok math, there are no doors that are closed to you in the software development field, if you don’t – it’s going to be all CRUD (pun intended)!
Conforme eu tinha prometido para os meus alunos há vários semestres, vou iniciar aqui no blog uma série de tutoriais em cima de duas tecnologias que venho estudando. O primeiro tutorial irá abordar os princípios da linguagem de programação Scala. O segundo irá mostrar as principais características do framework Jboss Seam.
A idéia desses tutoriais é mostrar o que cada ferramenta tem de mais produtivo para os programadores de aplicações. Na difícil tarefa de administrar o meu tempo útil, vou tentar escrever sobre esses dois temas de modo simultâneo. Caso o formato de blog mostre-se inadequado para essas publicações, poderei no futuro migrar todo o conteúdo para uma página exclusiva, com mais recursos para os usuários.
O material das minhas disciplinas regulares continuam publicadas no Moodle de meu portal.
No mês passado tive a honra de apresentar uma palestra na Semana Universitária de Caruaru, com o tema “Reuso de Software: uma Visão Geral”. O evento aconteceu no Campus da UPE no dia 10 de Outubro. A palestra é uma adaptação do material utilizado pelo RiSE nas disciplinas de reuso do mestrado do CIN.
Gostaria de agradecer ao Prof. Humberto Rocha pelo convite e aos alunos pelo comparecimento na palestra.
No último mês de Setembro aconteceu em Parma na Itália, a 34a Conferência da Euromicro, um dos eventos mais tradicionais da área de Engenharia de Software do mundo. Nessa edição, o RiSE Group teve dois artigos publicados, sendo um deles de minha autoria. O primeiro artigo foi “A Case Study in Software Product Lines – The Case of the Mobile Game Domain” de autoria de Leandro Nascimento, Eduardo Almeida e Sílvio Meira. Leandro por sinal foi o apresentador (vide foto) de um artigo de minha autoria, com participação de Eduardo Almeida e Sílvio Meira, intitulado “InCoME: Integrated Cost Model for Product Line Engineering”. Meus agradecimentos ao esforço e parceria de Kid por se dispor a apresentar o artigo para uma platéia altamente especializada em reuso de software.
A pergunta acima foi formulada pelo vice-presidente de pesquisas da Microsoft, Rick Rashid, em um paper publicado no mês de Julho de 2008. No texto original, Rashid mostra o resultado de uma pesquisa realizada na Universidade da Califórnia (UCLA), apontando um claro declínio na escolha da profissão de ciência da computação pelos alunos novatos. No início da década de 80, 5% dos novatos da UCLA escolhiam se formar em Computer Science. Hoje, esse número raramente alcança 1% dos novos alunos. A partir desses dados, Rashid buscou entender o que está afugentando os alunos dessa área, realizando uma pesquisa em várias escolas de 2o grau e universidades nos Estados Unidos. Os resultados da pesquisa estão listados abaixo:
- Boa parte dos alunos considera a ciência da computação uma profissão solitária; ou seja, se imaginam virando noites sozinhos na frente de um computador corrigindo bugs e se alimentando de pizzas, refrigerantes e salgadinhos (traduzindo: sem vida social);
- A profissão é identificada como um trabalho “tipicamente masculino” (Rashid mostra que 80% das mulheres pesquisadas consideram a profissão simplesmente “sem graça”);
- A percepção dos entrevistados é que a profissão se restringe apenas a escrever código e depurá-lo;
- Por último, a maioria dos alunos ouviram de algum parente ou professor que a profissão é muito instável, com um nível muito alto de terceirização e turnover nas empresas.
Rashid rebate esses argumentos mostrando as diversas faces que a profissão assume e os papéis que um profissional da área representa junto à sociedade. Os números mostram que apesar da aparente falta de interesse pela profissão, nunca se precisou tanto de profissionais na área de tecnologia da informação como agora. Até 2014, serão mais de 100.000 oportunidades de trabalho criadas anualmente nos Estados Unidos, para aproximadamente 12.500 profissionais formados pelas universidades de lá. Boa parte dessas vagas serão preenchidas por profissionais de outros países (o Brasil incluído nesse bolo), mas a situação parece caminhar para uma grave crise de capital humano. Rashid conclui o trabalho apontando várias propostas para aumentar a atratividade da área e retenção dos atuais alunos. A coisa passa basicamente por mostrar o impacto da profissão na sociedade, a possibilidade de resolver problemas complexos, o caráter inovador da profissão, o fato dos salários estarem aumentando por lá (repito: por lá), e por fim, a paixão pela profissão.
E aqui no Brasil? Um post de Eduardo Almeida no blog World of Reuse levantou a bola para o problema dentro do contexto de nosso país. Ampliando um pouco o debate, tenho visto nos últimos anos o mesmo movimento relatado por Rashid nas faculdades onde leciono. Tipicamente, as turmas dos primeiros períodos começam com 60, 70 alunos, mas raramente chegam no final do curso com mais de 20, 25 pessoas matriculadas. A quantidade de mulheres matriculadas também é mínima (tenho uma aluna em um grupo de dezessete no 8o período de um curso onde ensino). Como nos Estados Unidos, também não falta emprego para os profissionais de TI no Brasil (você duvida? basta olhar as 1.500 oportunidades em aberto da IBM, as 400 da CPM/Braxis, e por aí vai). Parte de meus alunos me relatam que tinham outra visão da profissão e não imaginavam o quanto era difícil chegar no final do curso.
A minha opinião para o problema é que a profissão não está morrendo. Estamos passando pela mesma crise que a Engenharia Civil enfrentou nos anos 90 (apesar de razões diferentes), com poucos alunos entrando nos cursos e menos ainda se formando. A própria demanda do mercado irá aumentar naturalmente os salários e atrair mais profissionais para área (por que você acha que dezenas de milhares de pessoas estudam Direito hoje?).
Qual a sua opinião sobre esse assunto? Comentários são bem-vindos.