成为一个软硬件通吃的技术大牛,有一点很重要!

有没有软硬件通吃的大牛,绝对有。这样的大牛多是懂一点软件,也懂一点硬件,在软件工程师面前和人聊硬件,在硬件工程师面前和人聊软件,于是,旁人都惊呼,好牛呀!

要想做一名软件硬件两方面技术均过硬的技术人员,必学必会第一招是什么?吹牛!对,就是要学会吹牛,不会吹牛,别人怎么会知道你是软硬件通吃的牛人呢,而且吹牛绝对是比软件技术和硬件技术更要难学的一门终身学问。如何把牛逼吹得不动生色又吊炸天,让对方在几天甚至多年以后还常想起来,一拍太腿,这哥们太牛了。

这样的吹牛绝学,笔者是会的,但很少使用,因为吹牛是大杀器,一出手便有血光之灾,商界震动。我曾练就十五秒钟说服马云投资200亿给联想的况世绝学,就差遇到马云了。是的,这门吹牛的绝世武功不能常用,常用就失效了,二则,笔者实在是没有机会施展。

今天不说吹牛,再吹就跑题了,还是说说如何成为软件硬件通知的大牛。

其实有许许多多的工种都需要软件会一点,硬件会一点,硬件的门槛远远高于软件,特别是模电。软件只需找本入门书(可别找那个21天从入门到放弃系列),写个'hello world ',你就迈入了软件的大门。

硬件转软件会相对容易,软件转硬件则非常难。为什么会这样呢,并不是说硬件有多难,软件有多简单,而且软件这个行业,你一旦迈步进去,就很难抽身,到时候你想转身学硬件,业务上和工作上的需求也不会给你这个转身机会。详细设计做完了你得写代码,代码刚写完需求就改了,产品出来后你以为可以歇口气,结果无穷无尽的bug, 好不容易产品稳定了,你想抽身,突然发现,从头到尾,所有的细节所有的流程所有的代码,只有你一个人门清,老板是万万不会放过你让你抽身的。

硬件工程题则没有这样的痛苦,画完一个pcb就做一版调一版,多做一版就得多花一版的钱,等产品稳定了,你想改个电阻,说不定对软件来说就是翻天覆地的变化,无论是你的团队还是你的老板都不会允许你再做任何的修改。不改就没活,没活你就闲着,这一闲下来,炒炒股啥的有的是时间,当然,你也可以学习学习编程这门苦手艺。

要想做一名软硬件通知的技术大牛,正确的流程是先做三年硬件,然后,余生其它的时间, 就全交给编程吧,用三年时间来做硬件,只要你够努力,够用心,你绝对有机会成为一名技艺高超的硬件工程师,而且绝对有机会把硬件领域所有的热点都摸一遍,而且这三年的硬件知识,绝对够你用一辈子,至少够你吃一辈子的牛。

当你放下硬件,准备进入编程这个行业,做一名苦逼的程序员时,你可以从C语言开始,c++,java,html ,php ,mysql, python ,shell .theadx ,ucos ,linux ,android , lnmp,lamp,hadoop ,openstack....随便一样,都需要你花三五年的时间,看看你的有生之年,能走到那一步。

不过,往往你在软件的第一关语言关通关,甚至'hello world '出来之后,你就可以开始营销你的软硬件通吃的大牛身份了。

现实工作中,有很多工种的牛人就是这么一路走过来的,比如嵌入式软件工程师、驱动工程师、操作系统内核软件工程师,但他们大多只是过了C语言这一关,再往前走一步都难。

话不多说,你可以从现在开始就来计算你的生命,可以在软硬件通吃这条路上走多远。记住,虽然叫软硬件大牛,但一定要从硬件开始,软件是一门你一旦跳入就爬不出来的苦海,若是乱了步法,你再也没有机会来重新学习硬件了。

最后,再强调一遍,吹牛是门必学的绝技,但不可滥用,不用滥用都可能将你逼入死地,哪怕你技术再好。

PS:小编提醒各位嵌友,别忘了给你们的女神过节!


1.傅里叶变换就是这么简单,你学会了吗?

2.硬件缺陷还真能用软件补?一起盘点软件为硬件填过的那些坑

3.讲真,工程师是这个星球上最酷的职业!

4.你知道嵌入式C语言中各变量存储的位置吗?

5.互相鄙视的模电和数电干了一架,结局很搞笑

6.作为一个电子工程师,学会阅读Datasheet很重要!

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一段简单的通吃蛇游戏代码(注释已添加): ``` import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SnakeGame extends JPanel implements KeyListener, ActionListener { // 游戏区域大小 private static final int WIDTH = 400; private static final int HEIGHT = 400; // 蛇的初始坐标和长度 private int snakeX[] = new int[600]; private int snakeY[] = new int[600]; private int length = 3; // 食物的坐标 private int foodX; private int foodY; // 蛇的当前移动方向 private String direction = "Right"; // 游戏是否结束 private boolean isGameOver = false; // 定时器,控制蛇的移动速度 private Timer timer = new Timer(150, this); public SnakeGame() { // 设置游戏区域大小 setPreferredSize(new Dimension(WIDTH, HEIGHT)); // 初始化蛇的初始位置 snakeX[0] = 100; snakeY[0] = 100; snakeX[1] = 75; snakeY[1] = 100; snakeX[2] = 50; snakeY[2] = 100; // 随机初始化第一个食物 generateFood(); // 添加键盘监听器 addKeyListener(this); setFocusable(true); setFocusTraversalKeysEnabled(false); // 开始定时器 timer.start(); } private void generateFood() { // 随机生成食物的位置,确保不与蛇的位置重叠 foodX = (int)(Math.random() * ((WIDTH - 10) / 10)) * 10 + 5; foodY = (int)(Math.random() * ((HEIGHT - 10) / 10)) * 10 + 5; for (int i = 0; i < length; i++) { if (foodX == snakeX[i] && foodY == snakeY[i]) { generateFood(); break; } } } private void move() { // 根据当前方向移动蛇头 if (direction.equals("Right")) { snakeX[0] += 10; } else if (direction.equals("Left")) { snakeX[0] -= 10; } else if (direction.equals("Up")) { snakeY[0] -= 10; } else if (direction.equals("Down")) { snakeY[0] += 10; } // 检查蛇是否吃到了食物 if (snakeX[0] == foodX && snakeY[0] == foodY) { length++; generateFood(); } // 更新蛇的身体位置 for (int i = length - 1; i > 0; i--) { snakeX[i] = snakeX[i - 1]; snakeY[i] = snakeY[i - 1]; } // 检查蛇是否碰到了墙或自己的身体 if (snakeX[0] < 5 || snakeX[0] >= WIDTH - 5 || snakeY[0] < 5 || snakeY[0] >= HEIGHT - 5) { isGameOver = true; } for (int i = 1; i < length; i++) { if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]) { isGameOver = true; break; } } } @Override public void paintComponent(Graphics g) { super.paintComponent(g); // 绘制游戏区域 g.setColor(Color.WHITE); g.fillRect(0, 0, WIDTH, HEIGHT); g.setColor(Color.BLACK); g.drawRect(0, 0, WIDTH - 1, HEIGHT - 1); // 绘制蛇头 g.setColor(Color.GREEN); g.fillRect(snakeX[0], snakeY[0], 10, 10); // 绘制蛇的身体 g.setColor(Color.BLACK); for (int i = 1; i < length; i++) { g.fillRect(snakeX[i], snakeY[i], 10, 10); } // 绘制食物 g.setColor(Color.RED); g.fillRect(foodX, foodY, 10, 10); // 绘制游戏结束提示 if (isGameOver) { g.setColor(Color.BLACK); g.setFont(new Font("Arial", Font.BOLD, 24)); g.drawString("Game Over", 150, 200); } } @Override public void keyPressed(KeyEvent e) { // 键盘按键监听器 int key = e.getKeyCode(); if ((key == KeyEvent.VK_LEFT || key == KeyEvent.VK_A) && !direction.equals("Right")) { direction = "Left"; } else if ((key == KeyEvent.VK_RIGHT || key == KeyEvent.VK_D) && !direction.equals("Left")) { direction = "Right"; } else if ((key == KeyEvent.VK_UP || key == KeyEvent.VK_W) && !direction.equals("Down")) { direction = "Up"; } else if ((key == KeyEvent.VK_DOWN || key == KeyEvent.VK_S) && !direction.equals("Up")) { direction = "Down"; } } @Override public void actionPerformed(ActionEvent e) { // 定时器监听器,每次移动蛇并重绘游戏区域 if (!isGameOver) { move(); } repaint(); } public static void main(String[] args) { // 创建游戏窗口 JFrame frame = new JFrame("Snake Game"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(false); frame.add(new SnakeGame(), BorderLayout.CENTER); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } @Override public void keyTyped(KeyEvent e) {} @Override public void keyReleased(KeyEvent e) {} } ``` 希望能够帮助到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值