Quero aprender a programar de maneira "à prova de futuro", se quiser. Embora o Windows domine o mercado de SOs de desktop (por enquanto), obviamente, há muito valor em aprender suas linguagens / estruturas / APIs e assim por diante - isso pode estar sujeito a alterações à medida que novos dispositivos surgem ou o Windows se atira no pé (sobre As visualizações amigáveis do Windows 8 não parecem muito atraentes ...).
Eu estaria certo ao pensar que ter um sólido conhecimento de C / C ++ para lógica de back-end / programação de baixo nível e similares, combinado com uma linguagem extremamente portátil como Java para GUI e assim por diante, seria uma boa base para o desenvolvimento de software isso será útil na maior quantidade de sistemas? - Estou falando de PCs, tablets, telefones.
fonte
Respostas:
Se você quer ser à prova do futuro, o melhor conselho que posso dar não é se envolver em uma tecnologia.
Portanto, não aprenda APIs às cegas. Aprenda como eles são concebidos. Quais são as filosofias por trás da cena? Quais são suas vantagens e defeitos? Pense em software em geral, não em uma tecnologia específica.
Você também pode trabalhar na boa concepção do programa, ir para OOP e AOP é uma boa opção IMO. Mas não apenas entenda o mecanismo, trabalhe verdadeiramente com a filosofia por trás do mecanismo.
Não negligencie a ciência da computação em geral, como estruturas de dados e algoritmos, porque eles são conhecimentos entre tecnologias, sempre úteis.
Também vá para boas práticas. Você costuma ter dúzias de maneiras de fazer algo, mas a maioria é uma porcaria: propensas a erros, difíceis de manter, difíceis de entender posteriormente ou por outro programador, etc. . . Geralmente, o código é mais difícil de ler do que escrever. Portanto, aprenda a gastar um pouco mais de esforço na escrita para facilitar a leitura (porque você lerá mais o código do que escreve).
Aprenda técnicas eficazes para depurar (uso inteligente de log e depurador) e testar (como escrever código que pode ser facilmente testado em unidade e como automatizar esses testes).
Então, você precisará de um histórico geral de tecnologia. Estou falando de um conhecimento muito amplo, como o funcionamento de um processador (falta de cache ou previsão de ramificação é um bom começo), sobre sistemas UNIX, sobre protocolos de rede como IP, TCP e Ethernet, etc. . .
No final, aprenda a aprender. Se você souber aprender, poderá se adaptar.
Você precisará de algum conhecimento forte em tecnologias específicas para conseguir um emprego, mas elas estão desatualizadas muito rapidamente (pense no COBOL, por exemplo, ou na programação da Web no momento da guerra do IE / Netscape). Portanto, não confie neles para ser à prova de futuro. Eles serão essenciais para serem contratados, mas definitivamente não o que faz um ótimo programador e o que tornará suas habilidades duráveis ao longo do tempo.
Edição: Se você está apenas começando, você definitivamente deve fazer alguma coisa. Qualquer coisa, mesmo. Um jogo como Tetris ou cobra é um bom começo e divertido. Se você não fizer as coisas, gastará muito tempo aprendendo e realmente não terá a experiência necessária para entender completamente o que aprendeu.
Vamos dar um exemplo com padrões de design. Os padrões de design são ótimos e você deve usá-los definitivamente. Mas, se forem usados em excesso, eles tornarão seu código complicado e difícil de entender. Você terá que enfrentar o problema que um padrão de design resolve e perder algum tempo tentando resolvê-lo ou seus efeitos colaterais para entender completamente do que se trata o padrão de design. Os padrões de design devem ser usados como pequenas refatorações ao longo do tempo, quando o código cresce. E você saberá quando um padrão de design é necessário quando o benefício for maior que a complexidade do código induzida por seu uso. Isso requer experiência.
Então, definitivamente, faça as coisas, elas aprendem com seus erros. Não posso insistir mais: FAÇA AS COISAS !
fonte
O que separa os bons programadores dos ruins é sua capacidade de programar em QUALQUER linguagem. Como outros pôsteres observaram, conhecer qualquer linguagem significativa orientada a objetos fornecerá as ferramentas para criar ótimos programas e demandar.
Além disso, se você ainda estiver na escola, tenha aulas de redação. Os melhores engenheiros e programadores também são os que comunicam bem suas idéias.
Depois de começar a trabalhar, a melhor coisa a fazer para evitar ser obsoleto é acompanhar as tendências atuais. Não tenha medo de deixar um emprego para outro, se eles não estiverem usando a tecnologia atual ou tiverem um processo terrível, etc. A pior coisa que você pode fazer por sua carreira é aceitar um emprego em que você trabalha com tecnologia antiga ou com processos fracos.
fonte
A resposta do @deadalnix é boa. Eu acrescentaria três coisas:
fonte
Desde que você está no começo, eu diria que apenas aprendeu um idioma, não importa qual deles. A dificuldade não está na própria linguagem (sintaxe), mas na compreensão dos conceitos; e esses conceitos gerais de programação se aplicam a todas as linguagens de programação, portanto, aprender o segundo, o terceiro e o quarto (...) idioma será muito mais fácil.
Portanto, no começo, não pense muito em ser "à prova de futuro". No entanto, à medida que avança, tente se tornar proficiente em idiomas muito diferentes um do outro. Basicamente, (como você disse), você deve usar uma linguagem de baixo nível (-ish) como C / C ++, uma linguagem de programação de nível superior como Java e também uma linguagem de script (Python, Ruby, etc.). Se você quiser ir para coisas realmente avançadas, também deve conhecer Assembly.
Mas não se estresse demais com isso agora. Aprender a programar leva anos. Por enquanto, basta escolher uma linguagem como Java ou C # ou qualquer outra coisa e seguir em frente. :)
fonte
If you want to go into the really advanced stuff you must also know Assembly
- Você pode fazer isso em qualquer nível, os desafios são diferentes.Não. Nada disso vai ajudar.
Um conhecimento sólido de estruturas de dados e algoritmos - independente de qualquer linguagem de programação específica - é mais valioso do que "programação de baixo nível e similares".
Uma "linguagem extremamente portátil como Java" é tão portátil quanto C e não ajuda. A próxima grande novidade será tão diferente dessas linguagens que seu Java super-portátil será um passivo, não um ativo.
O Mac OS (desktop, tablet e telefone) é todo feito no Objetivo C. Esse pode ser o lugar para começar.
O Windows (desktop, mesa e telefone) é todo feito em C #. Esse pode ser o lugar para começar.
fonte