Cùng với sức nóng của mùa Hè, ngày25/05/2013 HanoiScrum tổ chức Summer CodeRetreat 2013. Đây sự kiện thực hành chuyên sâu, tập trung vào các nguyên tắc cơ bản của phát triển phần mềm và thiết kế. Sự kiện sẽ được tổ chức 01 ngày tại FPT-Aptech, Tầng 4, Cung VHHN Việt Xô, 1A Yết Kiêu, Hà Nội.
Mời bạn đăng ký tham dự tại đây.
Code Retreat là gì?
Ý tưởng về Code Retreat khởi xướng khoảng năm 2009 tại hội thảo CodeMash ở Sandusky Ohio. Có rất nhiều những cuộc thảo luận xoay quanh việc chúng ta đã không thực sự thực hành một cách chú tâm. Trong những lĩnh vực có yếu tố sáng tạo, người tađược rèn luyện thường xuyên. Nhưng hầu hết các lập trình viên lại được rèn luyện chủ yếu từ thực tế công việc. Vì vậy họ đã không học tập tốt theo cách thường thấy với khả năng vốn có như khi họ rời xa những áp lực công việc.
Code Retreat lần đầu tiên được tổ chức tại Ann Arbor, Michigan. Với một vài nỗ lực, giờ đây Code Retreat đã có định dạng như chúng ta thấy hôm nay: đơn giản, hiệu quả và có tính lan tỏa. Giờ đây hoạt động này đã trở thành thông lệ với nhiều người vào mỗi dịp cuối tuần.
Hình dung về Code Retreat
Coderetreat là một sự kiện thực hành chuyên sâu, tập trung vào các nguyên tắc cơ bản của phát triển phần mềm và thiết kế. Bằng cách cung cấp cho các nhà phát triển có cơ hội để tham gia vào thực hành có chủ ý, tránh xa những áp lực của việc ‘hoàn thành nhiệm vụ’, hoạt động của Code Retreat đã chứng tỏ là một phương tiện có hiệu quả cao giúp cải thiện kỹ năng viết mã giúp giảm thiểu các chi phí thay đổi theo thời gian.
Sự kiện Code Retreat sẽ diễn ra trong thời gian một ngày với cấu trúc cơ bản như sau:
+ Các phiên làm việc. Mỗi phiên 45 phút.
+ Người tham gia tiến hành giải bài toán Game of life của Conway.
+ Lập trình theo cặp.
+ Sau mỗi phiên thì đảo cặp.
+ Xóa hết mã nguồn sau mỗi phiên.
+ Thực hiện cải tiến sau mỗi phiên.
Vấn đề với việc học trong khoảng thời gian có hạn là bạn không có thời gian để thử nghiệm. Không có đủ thời gian để trau truốt và đánh bóng một đoạn mã.
Làm sao để thoát khỏi sự gấp gáp như vậy?
Một cách cố ý đó là bạn không thể hoàn thành Game of Life trong vòng 45 phút.
Xóa hết mã nguồn. Đúng vậy, các mã lệnh thực sự không phải là vấn đề bởi dù sao cuối cùng cũng không ai nhớ đến nó.
Tại sao lại là Game Of Life?
Bài toán không phải là vấn đề quan trọng trong Code Retreat. Nó chỉ là nguyên liệu cho các lập trình viên thỏa sức công phá để rèn luyện những ngón nghề của mình.
Điều quan trong đối với Code Retreat là bạn được thực hành những kỹ năng mà thường ngày không có cơ hội luyện tập. Và sau khi trải qua Code Retreat, những trải nghiệm góp phần giúp bạn tốt hơn trong công việc hàng ngày.
Điều thú vị nhất ở Code Retreat đó là những quy tắc, những ràng buộc bất ngờ trong mỗi phiên làm việc.
Hoạt động CodeRetreat tại Việt Nam
Sự kiện Global Day of Code Retreat 2012 thu hút hàng nghìn lập trình viên trên toàn thế giới trải dài trên 24 múi giờ và được truyền trực tiếp thông qua Hangout trên Google+.
Đây cũng là lần đầu tiên Việt Nam tham gia Global Day of Code Retreat với hai địa điểm là Hà Nội và TP Hồ Chí Minh do hai đơn vị là HanoiScrum và AgileVietnam đứng ra phối hợp tổ chức, kết nối trực tiếp với các điểm cầu khác trên thế giới tại Singapore, Trung Quốc, Nhật Bản.
Sau sự kiện đầu tiên này, ban tổ chức đã nhận được nhiều phản hồi tích cực từ phía người tham dự. Vì vậy, tiếp nối thành công của Global Day of CodeRetreat 2012, vào mùa hè này, Code Retreat sẽ tiếp tục phủ sóng tại Việt Nam với sự kiện Summer CodeRetreat 2013. Phía Hà Nội, HanoiScrum và nhóm những lập trình viên đam mê của CocoDojo sẽ phối hợp cùng các điểm cầu khác trong cả nước cùng tổ chức một ngày hội dành cho các lập trình viên và những người đã và đang rèn luyện các kỹ năng lập trình chuyên sâu.
Hy vọng với sức nóng của mùa hè, một ngày trọn vẹn với Code Retreat sẽ mang đến cho các lập trình viên tham dự những trải nghiệm đáng nhớ.
Hẹn gặp tại Summer CodeRetreat Việt Nam 2013!
Nguồn: HanoiScrum.net
Thế là đã 1 năm kể từ CodeRetreet lần trước mình tham dự . Lần trước chưa hoàn thành được gì cả . Hôm nay buồn buồn ngồi làm lại xem tay nghề mình có tiến bộ tý nào không ? Kết quả là đã hoàn thành được , test qua thấy ok 🙂 share cho mọi người nhận xét và tham khảo
Thằng Cell :
public class Cell {
public boolean status;
public boolean oldStatus;
public int x;
public int y;
public boolean isStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public boolean isOldStatus() {
return oldStatus;
}
public void setOldStatus(boolean oldStatus) {
this.oldStatus = oldStatus;
}
public Cell() {
oldStatus = false;
}
Một Board quản lý các Cell :
public class Broad {
public List listCells;
public int m;
public int n;
public List getListCells() {
return listCells;
}
public void setListCells(List listCells) {
this.listCells = listCells;
}
public int getM() {
return m;
}
public void setM(int m) {
this.m = m;
}
public int getN() {
return n;
}
public void setN(int n) {
this.n = n;
}
public Broad() {
m = 5;
n = 5;
listCells = new ArrayList();
SetFirstStatus();
}
public void SetFirstStatus() {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
Cell cell = new Cell();
cell.x = i;
cell.y = j;
listCells.add(cell);
}
}
//set first
listCells.get(0).setOldStatus(true);
listCells.get(2).setOldStatus(true);
listCells.get(3).setOldStatus(true);
listCells.get(1).setOldStatus(true);
listCells.get(7).setOldStatus(true);
listCells.get(10).setOldStatus(true);
listCells.get(12).setOldStatus(true);
listCells.get(13).setOldStatus(true);
listCells.get(16).setOldStatus(true);
listCells.get(17).setOldStatus(true);
listCells.get(19).setOldStatus(true);
listCells.get(20).setOldStatus(true);
listCells.get(23).setOldStatus(true);
listCells.get(24).setOldStatus(true);
}
public void LifeContinue() {
int count = 0;
DisplayFirstBroad();
while (count < 3) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
//rule1
Cell cell = FindCell(i, j);
if (cell != null) {
int live = 0;
for (int x = i – 1; x <= i + 1; x++) {
for (int y = j – 1; y = 2 && live <= 3) {
if(cell.isOldStatus())
cell.setStatus(true);
} else //rule2
{
cell.setStatus(false);
}
//rule3
if (!cell.isOldStatus() && live == 3) {
cell.setStatus(true);
}
}
}
}
DisplayBroad();
for (Cell cell : listCells) {
cell.setOldStatus(cell.isStatus());
}
count++;
}
}
public void DisplayBroad() {
for (int i = 0; i < broad.getM(); i++) {
for (int j = 0; j < broad.getN(); j++) {
Cell cell = broad.FindCell(i, j);
if (cell != null) {
if (cell.isStatus()) {
System.out.print("1");
} else {
System.out.print("0");
}
}
}
System.out.print("n");
}
System.out.println("nn———————-nn");
}
public void DisplayFirstBroad() {
for (int i = 0; i < broad.getM(); i++) {
for (int j = 0; j < broad.getN(); j++) {
Cell cell = broad.FindCell(i, j);
if (cell != null) {
if (cell.isOldStatus()) {
System.out.print("1");
} else {
System.out.print("0");
}
}
}
System.out.print("n");
}
System.out.println("nn———————-nn");
}
public Cell FindCell(int x, int y) {
for (Cell cell : listCells) {
if (cell.getX() == x && cell.getY() == y) {
return cell;
}
}
return null;
}
}
Test : broad.LifeContinue();